数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

2
大量插入的InnoDB表不会使用我所有的CPU
我有一个数据包日志数据库,几乎从未查询过。它只需要在插入时快速。我之所以使用InnoDB,是因为我想保持ACID合规性,因为即使丢失单个数据包也可能损害我们的客户。在性能调整方案中,我通过多个数据库连接将1,000,000个数据包发送到服务器。但是,无论我在my.cnf中使用什么设置,我都无法使mysqld进程在具有12个核心的系统上使用超过900%的CPU。(盒子上没有其他东西。) 我设置了以下内容 innodb_file_per_table = 1 innodb_write_io_threads = 64 innodb_read_io_threads = 64 innodb_thread_concurrency = 0 如果使用MyISAM,则可以在大约6秒钟内获得所有写入的数据包。但是InnoDB大约需要25。我可以让MySQL使用其余的系统资源并更快地插入吗? 编辑:这是表的架构: +-------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+-------+ | t | bigint(20) unsigned | YES | | NULL | | | a | char(1) | YES | …

4
跨链接服务器的远程查询的SQL性能问题
这个过程 create proc dbo.Get_Accounts as begin declare @current_date datetime set @current_date = dbo.fn_currdate() select [fields] into dbo.current_accounts from linkedserver.database.dbo.accounts where date = @current_date end 10分钟后连续失败,并显示以下错误消息: 服务器:消息7399,级别16,状态1,行1 OLE DB提供程序'SQLOLEDB'报告了错误。提供程序终止了执行,因为达到了资源限制。[OLE / DB提供程序返回的消息:超时已过期] OLE DB错误跟踪[OLE / DB提供程序'SQLOLEDB'ICommandText :: Execute返回0x80040e31:执行程序由于达到资源限制而被执行程序终止。 但是,当我在具有硬编码日期的交互式查询窗口中从同一数据库(不在远程数据库)中运行同一查询时: select [fields] into dbo.current_accounts from linkedserver.database.dbo.accounts where date = '1/20/2012' 30秒后返回。 本地服务器是SQLSERVER 2008,远程服务器是SQLSERVER …

2
SQL Server 2012数据仓库和不同版本
使用Sql Server 2012,有3个旗舰版本:企业版,商业智能,标准版。 两者之间的完整比较:http : //www.microsoft.com/sqlserver/en/us/future-editions/sql2012-editions.aspx 商业智能版暗示它的目的是用于数据仓库,并涵盖了似乎最关键的问题: 自助式商业智能(警报,Power View,SharePoint Server的PowerPivot) 先进的企业BI(表格BI语义模型,高级分析和报告,VertiPaq™内存引擎) 高级数据集成(模糊分组和查找,更改数据捕获,高级数据挖掘) 企业数据管理(数据质量服务,主数据服务) 但是,企业版是唯一具有以下功能的版本: 数据仓库(列存储索引,压缩,分区) BI和Enterprise版本之间需要分开哪些功能?

1
如何在SQL Server中创建与非主键的关系?
我有一个用户表,该表有两列,分别是主键UserID和另一列UserName。 UserID(int)PK 用户名(varchar(256) 它们都是唯一的,但出于某些原因,我决定将UserName用作其他表中的引用。因此,例如,订单表通过UserName而不是userid引用了user。 订单编号 用户名 我想在所有引用UserName和Users表的表之间建立一种关系,以便获得SQL Server的级联更新/删除功能。 但是SQL Server不允许我在非主键列上创建关系。有什么方法可以在不更改用户表的情况下获得级联更新/删除功能,以便UserName是主键而不是UserID?

3
一个如何缩放SQL Server 2008或2012?
如何缩放SQL Server 2008(或2012)?从根本上讲,我知道有两种选择: 放大: 如果受CPU限制,我可以清楚地看到从1个CPU内核变为2到4个内核。或者,如果RAM使用量猛增,只需增加更多RAM。假设没有应用程序级别更改,SQL Server 2008/2012是否真的采用了这种方法并按比例扩大规模?为了最大程度地减少猜测,假设我没有做一些愚蠢的事情,例如燃烧CPU周期,进行交叉联接等。 向外扩展: 目前还不清楚横向扩展如何工作。我的意思是,如果我在第一个SQL服务器旁边添加了另一个SQL服务器,该查询如何知道要在哪个服务器上运行?前面是否有一些负载均衡器(SQL Server软件随附它吗?)?是否需要更改应用程序级别才能向外扩展正常工作?还是我必须对数据进行分片,并具有根据数据分片键调用正确的数据库服务器的自定义代码? 希望能有更多有经验的人提供意见。

2
多语言用户界面背后的数据库
这个问题是一个比在这些旧问题中已经解决过的问题稍微复杂的问题,所有这些都是重复的: 有关多语言数据库结构的建议(2011年6月) 保留多语言数据的最佳数据库结构是什么?(2010年2月) 多语言数据库设计的最佳实践是什么?(2009年5月) 多语言数据库的架构(2008年11月) 支持多语言用户界面的最流行的数据库方案似乎是将所有语言的所有翻译文本都放在一个表中,该表具有3列:文本ID,语言代码和文本本身。文本ID和语言代码共同构成主键。 一切都很好,但是现在考虑一下复杂性:假设文本需要可搜索。例如,假设这是一个多语言的电子商店。这意味着对于数据库中输入的每个商品类别,店主将使用N种支持的每种语言输入商品类别的名称,然后购物者将能够通过名称搜索商品类别,用他们自己的语言。 有一个问题:排序规则。 不同的语言具有不同的排序规则序列,而适用于一种语言的排序规则不适用于另一种语言。因此,如果所有语言的所有文本都在同一列上,它们将具有什么排序顺序?我们将如何查询数据库以查找特定文本的文本ID?尽管在网络产品中,搜索的准确性和性能可能并不十分重要,但出于讨论的目的,让我们假设它们确实很重要。 大多数数据库管理员在“数据库的排序规则”的意义上熟悉排序规则的概念。幸运的是,这只是默认排序规则,如果不存在其他排序规则信息,则使用该默认排序规则,但是也存在其他可以指定排序规则的地方: SQL CREATE INDEX命令支持排序规则规范。(尽管有传言说Microsoft SQL Server不支持它;有人知道吗?) SQL SELECT语句也支持排序规则,但是在这种情况下,排序规则规范可以作为一个函数使用,从而导致索引扫描而不是索引查找,如果我们想要性能,这可能是不允许的。(再说一次,如果那是我们能拥有的最好的,那总比没有好。) 我还听说,在Microsoft SQL Server上,您可以具有非持久的计算列,可以在其上指定排序规则并创建过滤索引,尽管我以前从未听说过,如果它只是Microsoft-SQL-Server-only功能,那么无论它多么酷和经过深思熟虑,我都不想使用它。 因此,鉴于所有这些,如果目标是可更新且可搜索的多语言数据库,那么我们将如何构建数据库以及如何执行查询? 这个问题的灵感来自于此处的讨论:如果某些数据少于4000个字符,nvarchar(max)如何将数据存储在数据库中会更快?

1
为什么建议人们不要通过视图进行更新
在大学期间,它不停地通过视图来更新表,而当我进入工作场所时,又告诉我们不要通过视图来更新数据库。 在何处/是否存在显着的性能影响?还是更多这样的情况,高级开发人员/ DBA告诉初级人员不要执行此操作,因为他们可能会由于不正确的联接而无意间造成严重破坏。 编辑 我正在使用MSSQL 2000-2008(取决于客户端的详细信息)

2
如果某些数据少于4000个字符,nvarchar(max)如何将数据存储在数据库中?
我必须开发一个CMS,以支持两种语言的英语,阿拉伯语。该CMS将是一种Article Publishing网站。在设计和分析时,我发现有些文章的长度超过8000个字符。我的表有一些列 PageID int, PageTitleEnglish nvarchar(200), PageTitleArabic nvarchar(200), PageDescEnglish nvarchar(500), PageDescArabic nvarchar(500), PageBodyEnglish nvarchar(max) PageBodyArabic nvarchar(max) 如果我将PageBody保留为nvarchar(4000),则限制为4000个字符,如果我必须存储阿拉伯语版本,则我需要16000个字节(因为阿拉伯语是Unicode,并且比ASCII占用3倍的空间)。 因此,我只剩下将PageBody定义为nVarchar(max)的选项,这从性能的角度来看是不利的。我的实际问题是,如果PageBody列中的某些数据少于4000个字符,它将比内联列中的数据或数据库中单独存储的数据少。 我也在Google上寻找了这个,但没有找到任何相关的答案以及在这种情况下如何提高性能。 欢迎为此类多语言CMS设计提供最佳实践建议。 我只需要支持两种语言,阿拉伯语和英语

3
PostgreSQL与Oracle高可用性解决方案?
PostgreSQL有一系列不同的高可用性选项,这些选项代表了将复制构建到RDBMS中的许多不同方式。 这是PostgreSQL高可用性,负载平衡和复制功能列表 问题 Oracle支持PostgreSQL高可用性矩阵中的哪些方法? oracle使用PostgreSQL不具备的技术来实现高可用性吗?

4
出于身份验证目的而拆分“用户”表是一个好主意吗?
假设我的站点中有一个用户表,该表中大约有2-3百万个用户(记录)。 为了加快我的登录过程,这是拆分用户表的好方法,一个用户表用于提供信息,另一个用于用户登录。 如果我们可以从一个表中运行类似于以下查询的查询: select username,password from users where username=`test` AND password=**** 是否有必要将其拆分,这会加快我的网站的登录过程吗?

4
MySQL群集RAM要求
从MySQL 5.1开始,数据不再需要完全存储在内存中。 我已经读到索引列(我认为整个索引结构)必须仍在内存中(MySQL High Availability,2010,第533页,“ MySQL群集将所有索引列保留在主内存中”)。 有鉴于此,如果没有足够的内存(例如,巨大的数据库(> 100GB或1TB),且内存配置较低(例如2个数据节点,每个内存1GB)的服务器上运行)会发生什么?

5
Oracle使用特殊字符最后对varchar2列进行排序
如何在Oracle中按自己定义的顺序对Varchar2或NVarchar2列进行排序。或者是否存在任何现有选项,这些选项将首先显示字母,然后显示数字,然后显示所有特殊字符。 我们的第一种方法是使用一个将字符手动映射到数字的函数。 select id, sorted_column from some_table order FN_SPECIAL_SORT_KEY(sorted_column,'asc') 特殊的排序功能将每个字符映射到一个2位数字,并将返回值用于排序。这似乎是非常昂贵的连接,并且感觉不对。 for i in 1..length(sorted_text) loop v_result:=v_result || case substr(sorted_text,i,1) WHEN ' ' THEN 82 WHEN '!' THEN 81 WHEN '"' THEN 80 WHEN '#' THEN 79 WHEN '$' .............. WHEN 'u' THEN 15 WHEN 'U' THEN 15 WHEN 'v' THEN …

2
将sql server数据库设为只读的好处?
我使用的是报告数据库,出于所有实际目的,该数据库是只读数据库。在此数据库上创建数据并生成并查看动态报告。 我当时正在考虑将此数据库设为只读。 关于只读数据库,我想问的一些问题是 仅数据是只读的吗?我们仍然可以在该数据库上创建索引或视图吗? 使用只读数据库的性能优势是什么?例如使用共享锁的SELECT查询,等等。 使用只读数据库有什么缺点吗? 使用只读数据库时,有什么最佳实践可遵循?

3
“逻辑差异”的定义?
我目前正在阅读CJ Date撰写的“ SQL和关系理论”。尽管我在书中走的很远,但我有一些基本问题。我想知道“逻辑差异”一词的含义,这本书确实尝试通过示例来解释该术语,但并没有真正解释它的含义(或者也许我理解错了??) 这是本书的一小部分: 我已经说过,关系和关系图片之间存在逻辑上的区别。逻辑差异的概念源自维特根斯坦的格言: 所有逻辑上的差异都是很大的差异。 我知道直觉上的逻辑差异是什么,我知道关系和关系图片之间的差异。我想要的是“逻辑差异”概念的形式化定义,因此我对它的含义有一个很好的了解。

1
具有全局标志的DBCC TRACEON
在“ 需要帮助对Sql Server 2005死锁方案进行故障排除 ”问题中,建议使用DBCC TRACEON (1204, -1)全局跟踪死锁。 在BOL中阅读此命令时,它指出仅当用户或应用程序未在系统上同时运行语句时才应使用该命令。这是否意味着在启用此跟踪标记时我们必须处于单用户模式?另外,为什么要这样做,遵循建议很重要?(在始终运行的生产系统中,似乎很难遵循。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.