数据库内存结构是怎样的

介绍

数据库内存结构是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

注意:通过服务器实例属性设置的最大/最小服务器内存是指缓存池内存
注意:表达只能使用1 g内存

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

二级:由内存文员/内存缓存/内存池三部分组成,内存职员访问内存节点的接口来分配内存。

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

数据库内存按申请大小分成两部分
1。申请小于等于8 kb为一单位的内存,这些内存被用于缓存(singlepage分配器)
2。申请大于8 kb为一单位的内存,这些内存主要用于SQL CLR,连接服务器和备份缓冲等。这些内存称为多页或MemToLeave (multioPage分配器)

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

查看内存职员的内存使用情况可调用系统。dm_os_memory_clerks视图


查看缓冲池的内存使用情况可调用sys.dm_os_buffer_descriptors视图

查看各数据库缓存情况
选择
DB_NAME (DS.database_id)数据库名,
演员(COUNT (1) * 8.0/1024.0 INT) UsedMB sys
。GROUP BY database_id dm_os_buffer_descriptors DS


数据库使用的总内存:主要由缓冲池中用于缓存的内存+从缓冲池中借(偷来的)的职员singlePage的内存+ MemToLeave(多页)的内存

选择
& # 39; singlePage (MB) & # 39;,
(和(C.single_pages_kb)/1024.0数字(10,2))从sys
。dm_os_memory_clerks C
UNION ALL
选择
& # 39; MemToLeave (MB) & # 39;,
(和(C.multi_pages_kb)/1024.0,数字(10,2))从sys
。dm_os_memory_clerks C
UNION ALL
选择
& # 39;缓冲池(MB) & # 39;,
(COUNT(1) * 8.0/1024.0数字(10,2))作为UsedMB sys
。dm_os_buffer_descriptors DS

或者使用性能计数器来查看占状态"置疑"用的内存
从系统选择*。sysperfinfo P
P。object_name像& # 39;:状态"置疑"内存管理器% & # 39;
, (P。counter_name像& # 39;目标服务器内存(KB) % & # 39;
或P。counter_name像& # 39;总服务器内存(KB) % & # 39;)


内存对象:
本质上是一个堆,由页分配器进行分配,使用系统。dm_os_memory_objects来查看,使用page_allocator_address来与标识记忆职员

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

数据库内存结构是怎样的