SQL Server长时间运行查询需要数小时但使用低CPU

Fra*_*ein 2 sql-server server-configuration long-running-processes database-performance sql-server-2012

我在Windows Server 2012下的SQL Server 2012中运行一些存储过程,这些存储过程位于具有32 GB RAM和8个CPU内核的专用服务器中.CPU使用率始终低于10%,RAM使用率为80%,因为SQL Server分配了20 GB(32 GB).

有些存储过程在某些日子和其他日子需要4小时,几乎相同的数据需要7或8小时.

我使用限制性最小的隔离级别,所以我认为这不应该是一个锁定问题.数据库大小约为100 GB,最大的表有大约500万条记录.

这些进程具有批量插入,更新和删除(在某些情况下,我可以使用truncate来避免生成日志并节省一些时间).我在一个表中进行了一些全文搜索查询.

我完全控制了服务器,所以我可以更改任何配置参数.

我有几个问题:

  1. 是否可以使用并行性来提高查询的性能?
  2. 为什么CPU使用率如此之低?
  3. 配置SQL Server的最佳实践是什么?
  4. 审核服务器的最佳免费工具是什么?我尝试了一个名为SQL Server 2012 BPA的Microsoft,但该报告始终为空,没有任何警告.

编辑:我检查了日志,我发现了这个:

2015年3月18日11:09:25,spid26s,未知,SQL Server遇到82次发生的I/O请求需要超过15秒才能完成文件[C:\ Program Files\Microsoft SQL Server\MSSQL11数据库[tempdb](2)中的.HLSQLSERVER\MSSQL\DATA\templog.ldf].OS文件句柄为0x0000000000000BF8.最新的长I/O的偏移量为:0x00000001fe4000

小智 5

  1. 将最大内存增加到24 GB.
  2. 将tempdb从c驱动器上移开并考虑多个tempdb文件,自动增长至少128 Mbps或256 Mbps.
  3. 安装性能仪表板并运行性能仪表板报告以查看正在运行的查询并检查等待.
  4. 如果您对用户数据日志和10%的日志文件使用alto frow,请将其更改为与上面的tempdb增长类似的内容.
  5. 使用性能仪表板检查明显缺失的索引,预测95%或更高的改进影响.
  6. 无视那些说不要做我所建议的那些Sayers.如果您执行这5项操作,并且仍然无法从性能仪表板发布一些结果,顺便说一下,这是免费的.
  7. 还有一件事可能有用,下载并安装sp_whoisactive存储过程,运行它并查看正在运行的进程.研究运行sp_whoisactive后找到的查询.