KAS*_*DBA 13 performance sql-server-2005 sql-server
我们试图找出运行缓慢的 sql server 查询从其中一个数据库中命中/获取数据的根本原因,大小为 300 GB,托管在具有以下配置的服务器上:
Windows server 2003 R2, SP2, Enterprise Edition, 16 GB RAM, 12 CPU'S 32 Bit
SQL Server 2005,SP4,企业版,32 位。
我们已经通知企业升级到 64 位,这需要一个多月的时间。
但是对于当前的问题,我们正在尝试收集数据,如果我们可以解决内存压力或最终得出增加RAM的结论。
已完成操作:重新索引和更新统计信息适用于此数据库。
如下所示,过去 5 天我们一直在注意到信号量等待类型,在加载时间运行:
以下查询后的信息很少:缓冲区大小= 137272
SELECT SUM(virtual_memory_committed_kb)
FROM sys.dm_os_memory_clerks
WHERE type='MEMORYCLERK_SQLBUFFERPOOL'
Run Code Online (Sandbox Code Playgroud)
和信号量内存 = 644024 每个以下查询
SELECT SUM(total_memory_kb)
FROM sys.dm_exec_query_resource_semaphores
Run Code Online (Sandbox Code Playgroud)
下面是一些更多的信息,从采集dm_exec_query_resource_semaphores
和sys.dm_exec_query_memory_grants
DMV的
所以从上面收集的信息和每个 SP_Blitz 数据资源信号量似乎是问题所在。
与可用的 16 GB RAM 相比,为资源信号量 ID 分配的内存“target_memory_kb”是否太低。
注意*每次运行 8 小时的分析“target_memory_kb”始终低于 1 GB,而可用 16 GB?
这里可能是什么问题以及如何解决,请提出建议
谢谢
Bre*_*zar 25
哦,天哪,我这里有一些坏消息。
在 32 位操作系统上,SQL Server 仅将前 4GB 内存用于诸如查询工作区之类的事情。(而且它也在为那 4GB 的操作系统而战 - 任何其他正在运行的应用程序也将争夺该内存。)
4GB 听起来可能很多,但编写需要几 GB 内存才能运行的查询相对容易。当足够多的查询需要足够的内存时,SQL Server 会抛出 RESOURCE_SEMAPHORE 等待,因为查询无法获得足够的内存来启动。RESOURCE_SEMAPHORE_QUERY_COMPILE 意味着他们甚至无法获得足够的内存来编译执行计划——是的,这很糟糕。
那你怎么解决呢?
我什至不敢说最后一个,因为 32 位问题太糟糕了,而且在旧版本的 SQL Server 上真的很难。如果您使用的是当前计划,您可以浏览计划缓存并按内存授予对查询进行排序,找到最大的授予接收者,并对其进行调整。不过,这件旧古董不是一个选择。
归档时间: |
|
查看次数: |
20323 次 |
最近记录: |