数据库管理员

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


1
为什么查询导致溢出到tempdb?
背景 我正在将160gb数据库从具有48gb RAM的Win 2008服务器上的MSSQL 2008(标准)迁移到具有64gb RAM的Win 2012上运行MSSQL 2012(64位网络版)的新服务器上。旧服务器处于活动状态并处于负载状态;新服务器未投入生产。新服务器具有8个tempdb文件(每个4GB)。 问题 在新服务器上进行测试时,我看到许多查询中的步骤引起警报,提示“操作员在执行过程中使用tempdb溢出数据”。我已经能够通过重写一些查询来避免排序,但这并不能真正解决问题。旧服务器上的相同查询不会引起溢出。我读过,当MSSQL无法完成内存中的操作并不得不溢出/分页到tempdb中时,就会发生溢出。我应该担心泄漏吗? 例子 我已经在数据库上运行了sp_updatestats,因此统计信息应该是最新的,但是您会注意到估计的行数与实际的行数之间存在一些差异。 内存问题 我已为64GB的MSSQL设置了最大内存设置。当前,MSSQL已消耗了大约35gb的内存,但是工作集只有682mb。旧服务器(尽管在生产中,正在处理负载)具有44gb的内存分配给MSSQL,其中43.5gb在其工作集中。 我不知道泄漏是否与记忆设置有关-任何人有任何想法吗?MSSQL当前有英亩的可用内存,那么为什么它会因某种排序和散列匹配而溢出到tempdb中?

2
创建表时如何确定默认表空间?
Tablespace创建表时该参数是可选的。 执行一条CREATE TABLE语句后,如果未定义默认值,Oracle将为其分配默认值。 在默认数据库中,有一个“ USERS”表空间。如果定义了多个表空间,将分配哪个表空间?
27 oracle 

4
为什么在相同计划中,(相同)1000个唯一索引的估计成本不同?
在下面的查询中,两个执行计划都估计将对唯一索引执行1,000次查找。 搜索是由对同一源表的有序扫描驱动的,因此看起来应该最终以相同的顺序搜索相同的值。 两个嵌套循环都有 <NestedLoops Optimized="false" WithOrderedPrefetch="true"> 有人知道为什么第一个计划的成本为0.172434,而第二个计划的成本为3.01702吗? (问题的原因是,由于明显降低了计划成本,因此向我建议了第一个查询,这是一种优化。实际上,我认为它似乎在做更多的工作,但我只是想解释这个差异。) ) 设定 CREATE TABLE dbo.Target(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); CREATE TABLE dbo.Staging(KeyCol int PRIMARY KEY, OtherCol char(32) NOT NULL); INSERT INTO dbo.Target SELECT TOP (1000000) ROW_NUMBER() OVER (ORDER BY @@SPID), LEFT(NEWID(),32) FROM master..spt_values v1, master..spt_values v2; INSERT INTO dbo.Staging …

2
最大连接池上限为100
我在Windows Server 2008机器上运行SQL Server 2008 R2 SP1。我有一个从Visual Studio 2010运行的.NET脚本,它执行以下操作: 到达数据库 做出改变 迭代 迭代的总次数为150,但是它在100个连接处停止,我不知道为什么。我可以将脚本调整为仅使用一个线程,但是我想知道我在哪里缺少最大连接设置,因为这对于以后的参考更为有用。 到目前为止,这是我检查过的地方: Visual Studio 2010中的SQL连接字符串(设置为1000) SSMS数据库实例连接属性(设置为0 [infinity]用户连接) Google在Server 2008上搜索了一些信息,看起来它可以处理100多个连接 逐步浏览我的代码,SP_WHO2其中提供了有关逻辑连接的更多信息,看到连接数从52开始,脚本错误和“达到最大池连接数”错误在152逻辑连接。 更改了要使用的连接字符串 Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000 我不确定其他地方是否需要检查,我知道我在这里有很多活动部件,但是我感到自己只是在某个地方缺少最大泳池设置。
27 sql-server 

1
PostgreSQL:如何转储和还原集群的角色?
角色存储在群集中的什么位置,如何转储它们? 我做了一个db的pg_dump,然后将它加载到另一个集群中,但是出现了很多这些错误: psql:mydump.sql:3621: ERROR: role "myrole" does not exist 因此,显然我的数据库转储不包含角色。我尝试转储'postgres'数据库,但那里也看不到角色。 我需要使用pg_dumpall --roles-only吗? Postgresql版本8.4.8和9.1.4 OS:Ubuntu 11.04 Natty

3
存储过程与内联SQL
我知道存储过程通过执行路径(比应用程序中的内联sql)更有效。但是,当按下时,我对原因并不了解。 我想知道这一点的技术原因(以便以后可以向某人解释)。 谁能帮我制定一个好的答案?

1
Varchar(max)字段会截断8000个字符后的数据
我有一个字段来存储一些数据,该字段声明为varchar(max)。据我了解,这应该存储2^31 - 1字符,但是当我输入一些超过8000个字符的内容时,它将切断其余字符。 我已经验证了所有数据都包含在我的更新语句中,并且该查询在其他任何地方都看起来不错,但是当我选择回退数据时,该查询已被切断。 当我在网站上显示数据时,以及使用SSMS时,数据都会被截断select content from table。 select DATALENGTH (content) from table 回到8000。 我使用此设置数据:update table set content = 'my long content' where id = 1。内容中确实包含很多HTML,但是我看不到这会引起问题。我可以看到我做的唯一的事情就是更换所有"有'',因为这是用户输入的内容(不记得我为什么现在)。 我确实设法通过删除内容中的所有单引号来使内容正确输入,所以我认为我的数据而不是数据库出现了一些奇怪的情况。 我应该对查询使用varchar(max)字段做一些特殊的事情吗? 使用:SQL Server 2008(10.50)64位。

4
为什么在解释查询中读取const表后会收到“不可能在哪里注意到”的信息?
当我运行带有解释的查询时,表中有一个独特的复合键,如fr(fromid,toid),得到以下结果: Impossible WHERE noticed after reading const tables` 我运行的查询: explain SELECT rid FROM relationship WHERE fromid=78 AND toid=60 有什么帮助吗? EDIT1: 当我使用以下查询时: explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND is_approved='s' OR is_approved='f' OR is_approved='t' 我看到的USING WHERE不是上一条消息,而是当我使用以下查询时: explain SELECT rid FROM relationship WHERE fromid=60 and toid=78 AND (is_approved='s' OR …
27 mysql  explain 

4
我需要在没有可用磁盘空间的情况下运行VACUUM FULL
我有一张桌子占用了我们服务器上接近90%的高清空间。我决定删除几列以释放空间。但是我需要将空间返回给操作系统。但是,问题是我不确定如果我运行VACUUM FULL并且没有足够的可用空间来复制表,会发生什么。 我知道不应该使用VACUUM FULL,但是我认为这是这种情况下的最佳选择。 任何想法,将不胜感激。 我正在使用PostgreSQL 9.0.6

6
为什么我的SELECT DISTINCT TOP N查询会扫描整个表?
我遇到了一些SELECT DISTINCT TOP N查询,这些查询似乎没有被SQL Server查询优化器优化。让我们从一个简单的例子开始:一个带有两个交替值的百万行表。我将使用GetNums函数生成数据: DROP TABLE IF EXISTS X_2_DISTINCT_VALUES; CREATE TABLE X_2_DISTINCT_VALUES (PK INT IDENTITY (1, 1), VAL INT NOT NULL); INSERT INTO X_2_DISTINCT_VALUES WITH (TABLOCK) (VAL) SELECT N % 2 FROM dbo.GetNums(1000000); UPDATE STATISTICS X_2_DISTINCT_VALUES WITH FULLSCAN; 对于以下查询: SELECT DISTINCT TOP 2 VAL FROM X_2_DISTINCT_VALUES OPTION (MAXDOP 1); …

4
删除所有(1200万)记录后,SQL Server“空表”运行缓慢吗?
我有一个大约有150列的SQL Server 2008实例。我以前在该表中填充了大约1200万个条目,但是此后清除了该表以准备新的数据集。 然而,命令,一旦在空表上立即跑如count(*)和select top 1000在SQL Management Studio现在采取亿万运行。 SELECT COUNT(*) FROM TABLE_NAME 花了11分钟以上的时间来返回0,SELECT TOP 1000花了将近10分钟的时间来返回一个空表。 我还注意到硬盘上的可用空间实际上已经消失了(从大约100G减少到20G)。之间发生的唯一事情是我运行了一个查询: DELETE FROM TABLE_NAME 到底是怎么回事?!?

2
MySQL在磁盘上创建临时表。如何停止?
我们正在运行一个用户当前发现缓慢的网站(Moodle)。我认为我已将问题归结为MySQL在磁盘上创建临时表。我created_tmp_disk_tables在Mysql Workbench服务器管理中观察该变量,并且该数目以大约50个表/秒的速度增加。使用几天后,created_tmp_disk_tables> 100k。此外,似乎没有释放内存。使用率一直在增加,直到系统变得几乎无法使用为止,我们必须重新启动MySQL。我几乎每天都需要重新启动它,首先要使用大约30-35%的可用内存,然后以80%的时间结束一天。 我在数据库中没有斑点,也无法控制查询,因此我无法尝试对其进行优化。我还使用了Percona Confirguration向导来生成配置文件,但是my.ini也不能解决我的问题。 问题 我应该怎么做才能阻止MySQL在磁盘上创建临时表?是否需要更改设置?我应该为此增加更多的内存吗? 如何阻止MySQL耗尽内存? 编辑 我启用了slow_queries日志,发现查询SELECT GET_LOCK()记录得很慢。快速搜索显示,我已允许PHP配置(mysqli.allow_persistent = ON)中的持久连接。我关闭了 这降低了MySQL占用内存的速度,尽管它仍在创建临时表。 我还检查了key_buffer size是否足够大。我看着变量key_writes。应该为零。如果不是,请增加key_buffer_size.I为零key_reads和零,key_writes因此我假设key_buffer_size足够大。 我将tmp_table_size和max-heap-table-size增加到1024M,因为created_tmp_disk_tables的增加可能表示表无法容纳在内存中。这没有解决。 参考:http : //www.mysqlperformanceblog.com/2007/08/16/how-much-overhead-is-caused-by-on-disk-temporary-tables/ 编辑2 如果sort_merge_passes在SHOW GLOBAL STATUS输出中看到每秒很多,则可以考虑增加该sort_buffer_size值。我sort_merge_passes一个小时有2个,所以我认为sort_buffer_size足够大了。 参考:Mysql手册 sort_buffer_size 编辑3 我已经按照@RolandoMySQLDBA的建议修改了排序和联接缓冲区。结果显示在下表中,但我认为created_tmp_tables_on_disk仍然很高。我更改了值并检查created_tmp_tables_on_disk了一天(8h)后并计算平均值后,重新启动了mysql服务器。还有其他建议吗?在我看来,有些东西不能放入某种容器中,但是我无法弄清楚它到底是什么。 +---------------------+-------------+-------------+--------------------+ | Tmp_table_size, | Sort_buffer | Join_buffer | No of created | | max_heap_table_size | | | tmp_tables on disk | +---------------------+-------------+-------------+--------------------+ …


2
如何正确执行MySQL烘烤?
我想针对一些其他分支(例如Percona服务器,MariaDB以及可能还有其他一些)进行性能测试(又称烘烤)MySQL服务器rpm。我希望通过提出这个问题,我可以更好地理解设置适当的性能测试的方法。我计划使用sysbench来运行我的实际测试,但是我可以接受任何东西。 我应该采取什么步骤来确保测试结果一目了然,并且只有RDBMS是变体? 我从哪里开始? 如何评估结果? 你能给我什么建议?

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.