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代码
- 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%'