SQL Server会把用过的数据放入cache,以便加速数据的访问。如果没有其它进程竞争,那么SQL Server会使用几乎全部的内存,直到有其它进程需要内存,才会释放内存。
在并发度不大的情况下,不用去设置SQL Server的内存是没什么问题的。但是在高并发度/大数据量的情况,这样可能会导致大量的页交换。推荐的做法是,设置SQL Server使用75%的内存,比如64G内存的服务器,我们一般设置SQL的最大内存为48G,然后观察SQL的Buffer Cache Hit Ratio,如果低于99%,再增加2G内存,直到Buffer Cache Hit Ratio高于99%
查询Buffer Cache Hit Ratio代码
Sql代码
SELECT
(CAST(SUM(CASE LTRIM(RTRIM(counter_name))
WHEN 'Buffer cache hit ratio'
THEN CAST(cntr_value AS INTEGER) ELSE NULL END) AS FLOAT) /
CAST(SUM(CASE LTRIM(RTRIM(counter_name))
WHEN 'Buffer cache hit ratio base' THEN CAST(cntr_value AS INTEGER)ELSE NULL END) AS FLOAT)) * 100
AS BufferCacheHitRatio
FROM sys.dm_os_performance_counters
WHERE LTRIM(RTRIM([object_name])) LIKE '%:Buffer Manager' AND
[counter_name] LIKE 'Buffer Cache Hit Ratio%'