数据库管理员

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

1
是什么导致“等待表级锁定”错误?
我们已经使数据库挂起了两次,并试图找到原因。 show processlist Waiting for global read lock | INSERT INTO {myisam_table} ... 在这里,磁盘空间已满,因此我们认为问题已经解决了,但第二天中午又挂起了: show processlist Waiting for table level lock | UPDATE {myisam_table} ... 是什么原因造成的? Mysql默认引擎:InnoDB。 数据库混合了MyISAM和InnoDB引擎的表。 日志发布在这里: http://arturito.net/2013/08/28/mysql-waiting-for-table-level-lock-errors/

3
更新大复制维度(SQL Server PDW)
我们将SQL Server PDW设备用于我们的数据仓库。我们仓库中的表之一是具有约2000万行的复制表。作为ETL流程的一部分,我们需要使该维度的旧记录过期;但是,我们看到更新少数记录(<100)需要1个小时以上才能完成。如果可以的话,这就是我想要改进的地方。 自然,我想到的一个选择就是将“维度”从“复制”更改为“分布式”。我的测试表明,这将解决ETL过程花费很长时间(从1.5个小时降低到30秒)的问题,但是针对此维度的分布式版本的所有联接都将受到影响,因为联接几乎从未基于同一分布柱。当我查看其中一些查询的执行计划时,通常会看到ShuffleMove或BroadcastMove操作。 因此,我对PDW专家的问题是: 为了提高在此Dimension 的复制版本中更新记录的性能,是否可以做其他事情? 再一次,移动到分布式表似乎不是最好的解决方案,因为它会影响其他人开发的数百个已编写的SQL查询和报告。

1
最好为每个用户帐户创建一个表,或者为MYSQL中的所有用户数据创建一个巨大的表
我正在创建一个Web目录,该目录将允许各个用户注册一个帐户并将本质上的文本文档存储在mysql数据库条目中。 最初可能只有几百个用户,但我们希望在某个时候拥有10,000到100,000。而且每个用户都可以上传100-200个“文档”。 创建一个由用户编号索引的海量表会更有效吗?从理论上讲,这可以增长到20,000,000个条目。还是继续为每个用户创建带有各自文档的表格? 我以为在数据库中有成千上万个表是不健康的,但是我真的找不到关于此的任何具体数据。
8 mysql 

1
Postgres 9.1.6错误索引在块0包含意外的零页
我在运行于debian服务器上的Postgres 9.1.6上设置了流复制,并且一切正常。 当我尝试在副本数据库上运行查询时,出现以下错误: ERROR: index "tbl_cust_id_idx" contains unexpected zero page at block 0 HINT: Please REINDEX it. 是什么导致此错误? 该问题也发布在/programming/17865135/postgres-9-1-6-error-index-contains-unexpected-zero-page-at-block-0

1
SQL Server最大和最小内存配置
在此用例中,最小内存和最大内存的正确设置是什么? 该服务器具有8GB内存,双Intel Xeon处理器,运行Windows Server 2008 R2 / SQL Server 2008 Standard Edition。它运行着多个数据库,大小从30GB到5GB不等。 最初,内存使用情况已设置为默认设置(最小= 0,最大= 2,147,483,647)。在这些设置上,大多数内存使用量已由sqlservr.exe占用,并且最终将需要每天或每两天重新启动服务器一次。它最初会正常运行,但一天之内就会在一些简单的操作(例如,使用主键查找记录)上超时。 我更改了最小值= 4,096和最大值= 6,144。这样只会占用1.4GB的内存。但是,现在所有四个cpus始终以50-60%cpu的使用率运行。尽管服务器要稳定得多,但执行任务所需的时间大约要长1/3。

1
了解MS SQL Server日期类型
考虑以下: declare @dt datetime, @dt2 datetime2, @d date set @dt = '2013-01-01' set @dt2 = '2013-01-01' set @d = '2013-01-01' select convert(varbinary, @dt) as dt, convert(varbinary, @dt2) as dt2, convert(varbinary, @d) as d 输出: dt dt2 d ------------------ -------------------- -------- 0x0000A13900000000 0x07000000000094360B 0x94360B 现在,我已经从理解的文件是datetime有一个较小的范围,并开始从1753年1月1日,而datetime2与date使用0001-01-01作为他们的开始日期。 我不明白不过,是datetime似乎是小端,而datetime2和date是大端。如果是这样,它们怎么能正确分类? 考虑一下我是否想知道一个date类型代表多少整数天。您会认为您可以这样做: declare @d date set …

2
正确的MySQL数据库维护
我希望这不是一个太大的问题。我敢肯定,它将能够帮助我以及以后遇到的任何dba新手。 我是一名DBA的系统管理员(因为我帮助CEO提出了自己的观点,因此我显然可以管理我们的数据库!)。它不是数据库服务器那么大或忙碌……mysqldump的大小约为6GB,花了我们5年的时间才使它变得如此大。Munin报告说,我们在高峰时段平均每秒查询40-60次查询。 我的老板为我支付了Oracle University系统管理课程的费用,但通过该课程,它仅说明mysql服务器的不同部分,做什么工作以及如何做。但这还不是那么深入,您肯定不会走DBA的那门课。 因此,作为当前的DBA,我应该怎么做才能确保一切顺利进行?我可以执行日常维护任务吗?我应该检查某些指标吗?或者换句话说,作为DBA,您每天会做什么以保持一切良好状态? 如果可以帮助您量身定制答案,请按以下说明进行操作。我们有171个表,除了3个以外,其他都是innodb,其他的都是myisam。我们使用RBR在主数据中心和灾难恢复站点之间设置了主/从复制。版本是5.5.28。 我能做什么?

3
在Microsoft SQL Server 2008中,语法生成错误“未启用并行数据仓库(PDW)功能”。
我有以下虚拟列是通过排序分区上的聚合生成的, MIN(picture_id) OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) 但是,当我执行该操作时,会得到以下结果。 Msg 11305, Level 15, State 10, Line 12 The Parallel Data Warehouse (PDW) features are not enabled. 尽管这是有趣的地方,但在分区上没有排序顺序,但它的工作原理是: MIN(picture_id) OVER ( PARTITION BY [360_set] ) 而且,ROW_NUMBER()窗口函数(不是聚合函数)在分区上以显式顺序工作。 ROW_NUMBER() OVER ( PARTITION BY [360_set] ORDER BY picture_id ASC ) …

2
如何减少SQL Server在Windows事件查看器中放置的内容?
作为自动化单元测试的一部分,创建,设置和删除了许多数据库。问题在于,每次发生这种情况时,我们都会在Windows事件查看器中从SQL Server获取一堆记录。这些消息主要是以下内容:“正在启动”,“设置数据库选项”和“已还原索引”。 有什么方法可以修改SQL Server配置,以便它不会将这些琐碎的“信息”级事件记录到事件日志中。他们正在填写日志,因此很难找到有用的信息。

2
使用JOIN有效地更新表
我有一个表,其中包含住户的详细信息,而另一个表中包含与住户相关的所有人员的详细信息。对于家用表,我有一个主键,它使用两列定义[tempId,n]。对于人员表,我有一个使用其3列定义的主键[tempId,n,sporder] 使用由主键上的聚集索引指示的排序,我为每个家庭[HHID]和每个人[PERID]记录生成了唯一的ID (下面的代码段用于生成PERID): ALTER TABLE dbo.persons ADD PERID INT IDENTITY CONSTRAINT [UQ dbo.persons HHID] UNIQUE; 现在,我的下一步是将每个人与相应的家庭相关联,即:将a映射[PERID]到[HHID]。两个表之间的人行横道基于两列[tempId,n]。为此,我有以下内部连接语句。 UPDATE t1 SET t1.HHID = t2.HHID FROM dbo.persons AS t1 INNER JOIN dbo.households AS t2 ON t1.tempId = t2.tempId AND t1.n = t2.n; 我总共有1928783户家庭记录和5239842人记录。当前执行时间非常长。 现在,我的问题是: 是否可以进一步优化此查询?更一般而言,优化联接查询的经验法则是什么? 是否有另一个查询构造可以在更短的执行时间内达到我想要的结果? 我已将SQL Server 2008生成的针对整个脚本的执行计划上载到 SQLPerformance.com

1
XML列的IN和NOT IN
我有一个带有xml列的表。Xml类似于 <Root> <Row> <user>abc</user> <Rowid>1</Rowid> </Row> <Row> <user>vf</user> <Rowid>2</Rowid> </Row> <Row> <user>ert</user> <Rowid>3</Rowid> </Row> <Maxrowid>3</Maxrowid> </Root> 现在下面的查询返回sl_no列和myxmlcolumn行包含节点``user''()中具有值``abc''或``xyz''的xml列。查询以下我正在使用类似于sql的IN选项。 SELECT [mytable].[Sl_no], [mytable].[myxmlcolumn] FROM [mydb].dbo.[mytable] WHERE [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0 我想要类似的查询,其功能与sql'NOT IN'相同。在我的情况下,我希望在xml列的节点“ user”()中不具有值“ abc”或“ xyz”的行。所以请帮我。

3
从CSV文件批量更新/插入数据库
我正在实现从一个数据库到另一个数据库的特定于应用程序的数据导入功能。 我有一个包含10000行的CSV文件。这些行需要插入/更新到数据库中。 在某些情况下,数据库中可能存在几行,这意味着需要更新这些行。如果数据库中不存在,则需要将其插入。 一种可能的解决方案是,我可以一行一行地读取,检查数据库中的条目并相应地构建插入/更新查询。但是此过程可能会花费很多时间来创建更新/插入查询并在数据库中执行它们。有时我的CSV文件可能有数百万条记录。 还有其他更快的方法来实现此功能吗?
8 java  oracle 

1
针对瞬时数据优化PostgreSQL
我有几张桌子,每张桌子都有100-300个整数类型的列,这些表保存高度易变的数据。数据集由一或两个主键进行键控,当刷新发生时,整个数据集将被删除,新数据将被插入到一个事务中。数据集的大小通常为几百行,但在极端情况下可以达到几千行。刷新每秒发生一次,并且通常不区分针对不同键的数据集更新,因此删除和重新创建表是不可行的。 如何调整Postgres以处理此类负载?如果有任何不同,我可以使用最新和最好的版本。

6
移动大型数据库
我有一个centos服务器,/ var / lib / mysql /是125GB(磁盘有1GB可用空间)。 通常,我会使用mysqldump备份数据库,但是我通常不使用大型数据库,因此我需要知道将数据库复制到新服务器的最安全方法。 所有建议表示赞赏!

5
“从relational(owner.table)中选择*”是什么意思?
我们最近在表单的警报日志中出现了一些错误 301598: Tue Jul 16 03:58:29 2013 301599: ORA-01555 caused by SQL statement below 301600: SELECT * FROM RELATIONAL(<owner>.<table>) 我知道如何处理ORA-01555错误,但是我从未遇到过类似的东西SELECT * FROM RELATIONAL。我查看了DBA_OBJECTS,但没有这样的功能/运算符/任何东西。 谷歌搜索“ SELECT * FROM RELATIONAL”仅返回与ORA-01555有关的问题。 所以,我的问题是:RELATIONAL关键字的含义是什么?
8 oracle 

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.