我在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来避免生成日志并节省一些时间)。我在一个表格中进行了一些全文搜索查询。
我可以完全控制服务器,因此我可以更改任何配置参数。
我有几个问题:
编辑: 我检查了日志,发现了这个:
03/18/2015 11:09:25,spid26s,未知,SQL Server遇到82次发生的I / O请求需要超过15秒才能完成文件[C:\ Program Files \ Microsoft SQL数据库[tempdb](2)中的Server \ MSSQL11.HLSQLSERVER \ MSSQL \ DATA \ templog.ldf]。 OS文件句柄为0x0000000000000BF8。最新的长I / O的偏移量为:0x00000001fe4000
答案 0 :(得分:5)
答案 1 :(得分:3)
查询花费数小时但使用低CPU
您说好像CPU对大多数数据库操作都很重要。提示:他们没有。
数据库需要IO。 RAM罪在某些情况下有助于减轻这种情况,但最后它会向下运行到IO。
你知道我在你的问题中看到了什么吗? CPU,内存(以某种方式假设32gb令人印象深刻)但是没有在DISC布局中使用。
这才是最重要的。光盘,分发文件以分散负载。
如果你研究性能计数器,那么你会发现光盘上的延迟非常高 - 因为无论你在那里有什么“可怜”(在sql server术语中)光盘布局,它根本不能完成任务。
开始购买的时间。 SSD比光盘便宜很多。你可能会说“噢,它们如何便宜”。好吧,你不买GB - 你买IO。上次我检查SSD的价格不是光盘价格的100倍 - 但它们有100倍或更多的IO。我们总是谈随机IO。
然后在单独的SSD上隔离Tempdb - tempdb要么没有很多,要么TON,你想要看到它。
然后隔离日志文件。
为数据库和tempdb创建多个数据文件(特别是tempdb - 与核心一样多)。
是的,这会花钱。但最后 - 你需要IO和大多数开发人员一样,你有CPU。数据库不好。