Jun*_*yhé 6 sql-server-2008 memory configuration
我们的客户有 SQL Server 2008 和 8GB RAM,托管在 Windows 2008 R2 SP1 中,并考虑以下可用内存量:
并考虑以下正在运行的程序:
场景:用户使用一个网站,该网站将本服务器中的数据保存在 SQL Server 数据库中。不超过 5 个用户。
问题:考虑到我们有 8GB 并且我们还在这台服务器上托管了 IIS(我认为这是一个坏主意),SQL Server 应该使用多少 RAM?在不影响 Windows、IIS 和任何其他正在运行的服务的情况下,我在哪里可以配置 SQL Server 应该真正使用的 RAM 量?
SQL Server 版本: Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 2011 年 9 月 21 日 22:45:45 版权所有 (c) 1988-2008 Microsoft Corporation 标准版(64 位),Windows NT 6.1(内部版本 7601:服务包 1)
Windows 版本: Microsoft Windows [版本 6.1.7601]
问题:考虑到我们有 8GB 并且我们还在这台服务器上托管了 IIS(我认为这是一个坏主意),SQL Server 应该使用多少 RAM?
“SQL Server 将使用多少内存”这个问题的答案是尽可能多。因此,始终建议为最大服务器内存设置适当的值,以便限制缓冲池。
请不要使用任务管理器来获取 SQL Server 内存利用率,如果 SQL Server 服务帐户具有locked pages in memory(LPIM)
特权,它不会给出正确的值。要查找 SQL Server 使用了多少 RAM,请使用以下查询
select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys. dm_os_process_memory
Run Code Online (Sandbox Code Playgroud)
在不影响 Windows、IIS 和任何其他正在运行的服务的情况下,我在哪里可以配置 SQL Server 应该真正使用的 RAM 量?
您可以使用以下查询在 Sp_configure 中执行此操作。
sp_configure 'show advanced options',1
go
reconfigure
go
sp_configure 'max server memory (MB)' , xxx --value in MB which you need to set
go
reconfigure.
Run Code Online (Sandbox Code Playgroud)
您可以使用查询修复最大服务器内存,但请记住,SQL Server 仍然可以将缓冲池之外的内存用于第三方 DLL 和扩展存储过程。这会导致 SQL Server 使用内存超过缓冲池中的限制
请阅读这篇文章。它将帮助您设置最大服务器内存的起始值。您应该使用以下计数器为最大服务器内存设置正确的值并监控 SQL Server 内存使用情况。
SQLServer:缓冲区管理器--页面预期寿命(PLE):PLE 显示页面在缓冲池中保留多长时间。它停留的时间越长越好。将 300 作为 PLE 的基线是常见的误解。但事实并非如此,我从 Jonathan Kehayias 的书(SQL Server 故障排除)中读到,当 SQL Server 为 2000 版本且最大 RAM 为 4-6 G 时,该值是基线。现在 200G 或 RAM 出现了这个值不正确。他还给出了如何计算的公式(暂定)。取大多数资源呈现的基本计数器值 300,然后根据配置的缓冲区缓存大小确定该值的倍数,即 SQL Server 中的“最大服务器内存”sp_config 选项除以 4 GB。因此,对于分配给缓冲池的 32 GB 的服务器,PLE 值应至少为 (32/4)*300 = 2400。
SQLServer:Buffer Manager--CheckpointPages/sec: Checkpoint pages /sec 计数器对于了解内存压力很重要,因为如果缓冲区缓存很低,那么由于加载检查点的工作,需要将大量新页面引入缓冲池并从缓冲池中刷新出来会增加并开始非常频繁地刷新脏页。如果此计数器很高,则您的 SQL Server 缓冲池无法应对即将到来的请求,我们需要通过增加缓冲池内存或增加物理 RAM 来增加它,然后对缓冲池大小进行适当的更改。从技术上讲,如果您在 perfmon 中查看折线图,则此值应该较低,此值应始终触及稳定系统的基础。
SQLServer:Buffer Manager--Freepages:这个值不应该小于你总是希望看到它的高值。
SQLServer:Memory Manager--Memory Grants Pending:如果您看到缓冲池中的内存授予未决,您的服务器正面临 SQL Server 内存紧缩,增加内存将是一个好主意。对于内存补助,请阅读这篇文章
SQLServer:内存管理器--目标服务器内存:这是 SQL Server 试图获取的内存量。
SQLServer:memory Manager--Total Server memory这是 SQL Server 获取的当前内存。
答案是,这具体取决于您对 SQL Server、IIS 等施加的负载量。(SSIS?SSRS?)所有这些加起来。
\n\nJonathan Keheyias 有一个对我来说非常有效的通用公式:“为操作系统预留 1 GB RAM,为从 4\xe2\x80\x9316 GB 安装的每 4 GB RAM 预留 1 GB,然后为每 8 GB 预留 1 GB安装的 RAM 高于 16 GB RAM。”
\n\n\n\n因此,这个公式表示将 SQL Server 限制为 5 GB 左右,并让服务器上的其他代码也有一些内存可供使用。(或者添加更多内存并重新计算。)
\n\n您需要尝试内存设置,直到找到平衡。
\n\n注意:如果正确平衡内存使用,大部分内存仍将被使用,但可以更好地在应用程序之间共享。
\n