有人可以解释我的Windows / SQL Server内存使用情况

时间:2009-04-02 20:23:15

标签: sql-server windows sql-server-2005 memory 64-bit

我正在运行带有8GB RAM和SQL Server 2005 64位的Windows Server 2003 x64。我有SQL设置使用内存负载,但SQL进程只需要不到100 MB的RAM。这是正常的吗?它正在访问索引大小为GB的数据。

此外,没有进程占用超过100MB,但只有最小(<100MB)的内存量。

有些人可以向我解释使用内存的地方以及SQL内存使用情况是否正常?

内存使用情况: http://img129.imageshack.us/img129/8624/02042009210608.png

SQL Server内存设置:

http://img10.imageshack.us/img10/8964/02042009210845.png

记忆细节:

http://img228.imageshack.us/img228/3830/02042009210917.png

5 个答案:

答案 0 :(得分:2)

显示的值不是实际使用的内存量。 Mark Russinovich在他博客的某些帖子中处理Windows上的内存管理问题。请查看Pushing the Limits of Windows: Physical MemoryPushing the Limits of Windows: Virtual Memory

答案 1 :(得分:2)

我建议使用Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)作为衡量进程使用内存量的更好方法。右键单击标题并选择“选择列”,然后选择“处理内存”选项卡,最后选中“专用字节数”和“专用字节历史记录”选项。

就你的SQL内存配置而言,我建议将最小值设置为你在机器上永远不需要的其他任务以及推动你填充物理内存的最大值(计算其他过程),但没有更远。

答案 2 :(得分:2)

这些设置的内存使用率是正常的,虽然在任务管理器中没有看到它,但它是使用内存的SQL Server。

但是,正如您所看到的,总内存使用量超过了物理内存,这对服务器的性能不利。您应该将数据库服务器的内存限制设置为超过物理内存。数据库服务器使用内存来缓存数据和结果,如果必须从磁盘交换缓存,则无法获得缓存。

答案 3 :(得分:1)

在搜索Process Explorer中未显示的SQL Server内存时发现了此问题。原因是在SQL Server 32位和64位上,内存分配可以配置为使用AWE API。

此前提条件是必须为运行SQL Server进程的帐户配置内存中的锁定页。这适用于32位和64位。这是通过组策略编辑器(gpedit.msc)完成的,然后导航到计算机配置 - &gt; Windows设置 - &gt;安全设置 - &gt;本地政策 - &gt;用户权利分配然后将相应的帐户添加到内存中的锁定页面策略设置。

默认情况下,本地系统已经具有此功能(http://blogs.msdn.com/b/psssql/archive/2007/10/18/do-i-have-to-assign-the-lock-privilege-for-local-system.aspx)。

对于SQL Server 32位2005 - 2008R2,您需要通过使用AWE分配内存在内存选项中启用AWE。 SQL Server 2012 32位及更高版本不再具有此选项。

对于SQL Server 64位,内存中的锁定页面将使用AWE分配内存。

为了查看这些AWE内存分配,您可以使用内存映射器工具,例如 Sysinternals RAMMap http://technet.microsoft.com/en-au/sysinternals/ff700229.aspx

您可以通过以下方式确定您的SQL Server是否正在使用锁定页面:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

EXEC xp_cmdshell 'whoami /priv'
GO

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
GO

您应该看到 SeLockMemoryPrivilege 已启用。

对于SQL Server 32位,您可以通过确认启用AWE(不需要对64位进行此检查):

EXEC sp_configure 'awe enabled'
GO

并且run_value应为1.

如果事实证明你的服务器没有使用AWE分配的内存,那么按照Godeke的帖子使用Sysinternals Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)是更好的方法 - 更好的界面和更容易理解/使用。

答案 4 :(得分:0)

  

默认情况下,SQL Server会动态增长并缩小其大小   缓冲池(缓存)取决于报告的物理内存负载   操作系统。只要有足够的内存可用来防止   分页(4到10 MB之间),SQL Server缓冲池将继续   成长。与SQL Server在同一台计算机上的其他进程   分配内存,SQL Server缓冲管理器将释放内存为   需要。 SQL Server可以释放并获取几兆字节的内存   每秒,允许它快速调整到内存分配   变化。

来源:http://support.microsoft.com/kb/321363