none
为什么在Windows 任务管理器中不能显示SQL Server分配的全部内存 RRS feed

  • 常规讨论

  • 在Windows Server 2000/2003任务管理器中,“内存使用”这个字段是显示工作区分配的内存。一个进程的工作区是这个进程在虚拟地址空间的页面集,这些页面集当前驻存在物理内存中。不可分页的内存分配如地址窗口化扩展控件(AWE),或大型页分配的内存不包含在工作区中。所以,档AWE内存分配机制启用的情况下,任务管理器将显示不正确的内存使用量。要找出SQL Server通过AWE机制分配了多少内存,你可以使用下面的语句查询 sys.dm_os_memory_clerks 动态管理视图:

    SELECT
    SUM(awe_allocated_kb) / 1024 as [AWE allocated, Mb]
    FROM
    sys.dm_os_memory_clerks

    在Windows  Server 2008的任务管理器中,这个字段被称作“内存(私有工作区)”。私有工作区是工作区的一个子集,它明确显示一个进程占用的内存总量,但不包括跟其他进程共享部分的内存。你可以大概地估计每个进程的分页内存:用性能监视器中的专用字节数计数器中的内存量减去这个进程的工作区内存量。

    1. 监控SQL Sever 占用的全部内存,你可以运行DBCC MEMORYSTATUS命令。这个命令提供了当前SQL Server数据库内存状态的一个快照。在这个命令的结果中,内存管理器部分显示了SQL Server消耗的总内存。这部分的元素如下所示:
    a) VM保留: 此值显示了整个 SQL Server 而已保留的虚拟地址空间 (VAS) 量。
    b) VM保证: 此值显示了整个 VAS SQL Server 已提交的量。已提交的 VAS 已经与物理内存相关联。
    c) AWE分配: 此值显示了整个通过 AWE 机制 SQL Server 的 32 位版本上分配的内存量。或者,此值的显示在产品的 64 位版本占用整个锁定页面的内存量。
    d) 保留的内存: 此值显示为专用的管理员连接 (DAC) 保留的内存。
    e) 保留使用内存中: 此值显示了正在使用的保留的内存。
    下面的例子是内存管理器部分的结果:

    Memory Manager KB
    ------------------------------ --------------------
    VM Reserved 1761400
    VM Committed 1663556
    AWE Allocated 0
    Reserved Memory 1024
    Reserved Memory In Use 0

    2. 在SQL Server 2008中,你可以通过简单查询sys.dm_os_process_memory动态管理视图得到这些信息。字段physical_memory_in_use显示SQL Server使用的总内存 量,包括通过大型页和 AWE API分配的内存。字段large_page_allocations_kb和字段locked_pages_allocations_kb分别显示通过大型页 API 分配的内存和AWE API 分配的内存。
    参考:

    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 年的内存使用情况
    http://support.microsoft.com/kb/907877

    sys.dm_os_process_memory

    工作区
    http://msdn.microsoft.com/en-us/library/cc441804(VS.85).aspx

    监视内存使用量
    http://technet.microsoft.com/zh-cn/library/ms176018.aspx

    2011年10月5日 1:39
    版主