博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库内存结构
阅读量:6331 次
发布时间:2019-06-22

本文共 1630 字,大约阅读时间需要 5 分钟。

数据库从操作系统申请到的内存可分为两部分:

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

转载地址:http://stnoa.baihongyu.com/

你可能感兴趣的文章
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
[LeetCode]--349. Intersection of Two Arrays
查看>>
tomcat启动报错
查看>>
mongorocks引擎原理解析
查看>>
用Swift实现一款天气预报APP(一)
查看>>
oracle11g R2 RAC卸载grid
查看>>
ES6 结构和扩展运算符
查看>>
王利阳:电商大促 决战6.18
查看>>
kafka消息传输的事务定义
查看>>
JAVA 后台数据校验
查看>>
实现LNMMP
查看>>
mysql的pid文件出现问题
查看>>
计算rem单位
查看>>
第七章 大网高级 ASA
查看>>
rsync+inotify触发式远程同步
查看>>
优秀设计师应当知道的几大UI设计原则(一)
查看>>