zoukankan      html  css  js  c++  java
  • Buffer Pool--数据库内存结构

    数据库从操作系统申请到的内存可分为两部分:
    1.缓存池内存(数据页和空闲页)
    2.非缓存池内存(线程/DLL/连接服务器等)

    Note:通过服务器实例属性设置的最大/最小服务器内存是指缓存池内存
    Note:Express只能使用1G内存

    数据库内存可分为三个层级
    Level1:内存节点(Memory Node),提供低级的分配器的接口和实现,在NUMA中内存节点和CPU节点对应,只有内存CLERK可以访问内存节点;

    Level2:由内存CLERK/内存缓存/内存池三部分组成,内存CLERK访问内存节点的接口来分配内存。

    Level3:内存对象,SQL SERVER组件使用内存对象,而不使用Memory CLERK,内存对象使用内存CLERK的页分配器接口来分配页。

    数据库内存按申请大小分成两部分
    1.申请小于等于8KB为一单位的内存,这些内存被用于缓存(singlepage allocator)
    2.申请大于8KB为一单位的内存,这些内存主要用于SQL CLR,Linked Server and backup buffer and others. 这些内存称为Multi-Page OR MemToLeave(multioPage allocator)

    MemToLeave保留内存=((CPU数量-4)+256)*0.5+256 约等于384MB

     

    查看Memory CLERK的内存使用情况可调用sys.dm_os_memory_clerks视图


    查看Buffer pool的内存使用情况可调用sys.dm_os_buffer_descriptors视图

     

    --查看各数据库缓存情况
    SELECT
    DB_NAME(DS.database_id) AS DatabaseName,
    CAST(COUNT(1) *8.0/1024.0 AS INT) UsedMB
    FROM sys.dm_os_buffer_descriptors DS
    GROUP BY database_id
    
    --数据库使用的总内存:主要由buffer pool中用于缓存的内存+从Buffer pool中借(stolen)的CLERK singlePage的内存+MemToLeave(MultiPage)的内存
    SELECT
    'SinglePage(MB)',
    CAST(SUM(C.single_pages_kb)/1024.0 AS NUMERIC(10,2))
    FROM sys.dm_os_memory_clerks C
    UNION ALL
    SELECT 
    'MemToLeave(MB)',
    CAST(SUM(C.multi_pages_kb)/1024.0  AS NUMERIC(10,2))
    FROM sys.dm_os_memory_clerks C
    UNION ALL
    SELECT
    'Buffer Pool(MB)',
    CAST(COUNT(1) *8.0/1024.0 AS NUMERIC(10,2)) AS UsedMB
    FROM sys.dm_os_buffer_descriptors DS
    
    --或者使用性能计数器来查看SQLServer占用的内存
    SELECT * FROM sys.sysperfinfo P
    WHERE P.object_name LIKE 'SQLServer:Memory Manager%'
    AND( P.counter_name LIKE 'Target Server Memory (KB)%'
    OR P.counter_name LIKE 'Total Server Memory (KB)%')


    Memory Object:
    本质上是一个堆,由Page allocator进行分配,使用sys.dm_os_memory_objects来查看,使用page_allocator_address来与标识memory clerk


     

  • 相关阅读:
    ASP.NET中 CheckBox(复选框)的使用
    ASP.NET中 HyperLink(超链接)的使用
    ASP.NET中 HiddenField(隐藏控件)的使用
    ASP.NET中 ImageButton(图片按钮)的使用
    ASP.NET中 PlaceHolder(占位文本)的使用
    ASP.NET中 FileUpload(上传控件)的使用
    Metro Style App开发快速入门 之XML文件读取,修改,保存等操作
    .NET Framework 4.5新特性
    一个10年程序员给大家的忠告
    SQLite快速入门二表、视图的创建、修改、删除操作
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3518991.html
Copyright © 2011-2022 走看看