我正在对高流量(16000 多个用户,峰值估计 1000 多个并发)Microsoft Dynamics 数据库进行性能测试。
服务器几个月前上线了,我正在做一些测试,看看它是如何处理当前流量的。
在工作时间检查一些性能计数器时,我在目标和总服务器内存中发现了一个奇怪的问题。
虽然我只会在目标内存明显高于总内存时将其标记为问题,但结合其他计数器(取决于差异量)可能会导致此处的结果有些奇怪。
使用:
SELECT object_name, counter_name, cntr_value FROM sys.dm_os_performance_counters
where (object_name like '%Buffer Manager%' and counter_name like '%page life%')
or (object_name like '%Memory Manager%' and counter_name like '%memory grants pending%')
or (object_name like '%Memory Manager%' and counter_name like '%target server memory%')
or (object_name like '%Memory Manager%' and counter_name like '%total server memory%');
我得出以下结果:
counter_name | cntr_value
------------------------------------------------
Page life expectancy | 14887
Memory Grants Pending | 0
Target Server Memory (KB) | 44040192
Total Server Memory (KB) | 44040184
显然目前没有内存压力,并且页面预期寿命高于要求。但是,在某些时候,sql server 似乎正好缺少 8 KB 内存。
这些数字对我来说似乎有些奇怪,但我无法确定。
这是否表明 sql server 在某些时候处于内存问题的边缘?
我是否正确地认为因为这些数字非常相似,所以我现在可以忽略它,并在经过相当长的时间后再次测试?
我必须说这是正常的,没有什么可担心的。该博客讲述了如何计算目标服务器内存。请看下面的论坛
根据我使用此公式的发现,即使目标服务器内存比总内存大一点也没关系。这取决于价值的计算方式。
如果目标服务器内存大于总服务器内存,则并不总是表示内存压力。你必须摆脱这种信念(如果你有的话)。就像你提到的其他柜台必须考虑在内。SQl Server 多次更改其目标和总服务器内存值,这取决于系统负载。考虑一个场景,你为所有大表运行索引重建,会有一系列活动,PLE 肯定会降低目标内存的增加,但这并不意味着它是内存压力。SQL Server 内存刚刚调整为当前负载。
你应该有 RAM,这样它就可以将所有数据库保存在
ideal world
内存中,但这很多时候是不可能的。