微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的SQL需要多少内存?

我有一个VM(sql数据库服务器),我认为它有更多的内存,然后它需要,但我不知道我可以减少它,因为我不明白什么“使用中”,“可用”,“承诺“和”缓存“记忆意味着.

以下是我进行一些负载测试后任务管理器的屏幕截图.让我们假设负载不会比这更强烈.

我觉得64GB的RAM太多了.我想了解在不降低性能的情况下我能带走多少.

这是否意味着我只需要8GB,因为这超过了“使用中”金额?或者,当我确定需要多少时,我是否需要包含“缓存”金额?

解决方法

sql Server将保留它分配的RAM,因此它似乎不超过6-7 GB,我会为sql分配8GB并在这种情况下为操作系统保留2-4 GB(sql总是会做一些它为sqlserver.exe分配的内存之外的任务.

将此值(8 GB)放在sql server实例的最小内存设置中是个好主意.这样,当sql需要内存时,它不会浪费时间首先分配它,因为它在启动时需要8GB.

在玩RAM时,您可以随时查看Page Life Expectancy.这将告诉你什么东西留在RAM中.这是一个以秒为单位的值,只要它继续上升,你就是金色的.

SELECT object_name,counter_name,cntr_value
FROM sys.dm_os_performance_counters
WHERE [object_name] LIKE '%Buffer Manager%'
AND [counter_name] = 'Page life expectancy'

只要它保持在300以上,你就可以了.较低的值表示一些记忆压力.这可能在执行大型排序,更新/重建索引后发生,…如果在重新启动实例后该值很低,请不要惊慌失措,它永远不会超过sql运行的时间.

第二个有趣的计数器是缓冲区高速缓存命中率,它将告诉您从内存中提取了多少先前的请求(最后几秒).

SELECT CAST(A.cntr_value1 AS NUMERIC) /
 CAST(B.cntr_value2 AS NUMERIC)* 100 AS Buffer_Cache_Hit_Ratio_Percentage,A.cntr_value1 As Cache_Hits,B.cntr_value2 AS Cache_Lookups
 FROM ( SELECT cntr_value AS cntr_value1
 FROM sys.dm_os_performance_counters
 WHERE object_name = 'MSsql$sql01:Buffer Manager' AND counter_name = 'Buffer cache hit ratio'
 ) AS A,(SELECT cntr_value AS cntr_value2
FROM sys.dm_os_performance_counters
WHERE object_name = 'MSsql$sql01:Buffer Manager' AND counter_name = 'Buffer cache hit ratio base'
) AS B;

在此示例中,我的sql实例是命名实例sql01,因此将其更改为您的实例名称或将MSsql $sql01:Buffer Manager更改为MSsqlServer:Buffer Manager(如果您有认实例).

越高越好.在理想的情况下,你会得到100%,这意味着整个数据库都在内存中.

原文地址:https://www.jb51.cc/mssql/80645.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐