溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫內(nèi)存結(jié)構(gòu)是怎樣的

發(fā)布時(shí)間:2021-12-02 14:43:31 來源:億速云 閱讀:172 作者:柒染 欄目:云計(jì)算

數(shù)據(jù)庫內(nèi)存結(jié)構(gòu)是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

數(shù)據(jù)庫從操作系統(tǒng)申請(qǐng)到的內(nèi)存可分為兩部分:
1.緩存池內(nèi)存(數(shù)據(jù)頁和空閑頁)
2.非緩存池內(nèi)存(線程/DLL/連接服務(wù)器等)

Note:通過服務(wù)器實(shí)例屬性設(shè)置的最大/最小服務(wù)器內(nèi)存是指緩存池內(nèi)存
Note:Express只能使用1G內(nèi)存

數(shù)據(jù)庫內(nèi)存可分為三個(gè)層級(jí)
Level1:內(nèi)存節(jié)點(diǎn)(Memory Node),提供低級(jí)的分配器的接口和實(shí)現(xiàn),在NUMA中內(nèi)存節(jié)點(diǎn)和CPU節(jié)點(diǎn)對(duì)應(yīng),只有內(nèi)存CLERK可以訪問內(nèi)存節(jié)點(diǎn);

Level2:由內(nèi)存CLERK/內(nèi)存緩存/內(nèi)存池三部分組成,內(nèi)存CLERK訪問內(nèi)存節(jié)點(diǎn)的接口來分配內(nèi)存。

Level3:內(nèi)存對(duì)象,SQL SERVER組件使用內(nèi)存對(duì)象,而不使用Memory CLERK,內(nèi)存對(duì)象使用內(nèi)存CLERK的頁分配器接口來分配頁。

數(shù)據(jù)庫內(nèi)存按申請(qǐng)大小分成兩部分
1.申請(qǐng)小于等于8KB為一單位的內(nèi)存,這些內(nèi)存被用于緩存(singlepage allocator)
2.申請(qǐng)大于8KB為一單位的內(nèi)存,這些內(nèi)存主要用于SQL CLR,Linked Server and backup buffer and others. 這些內(nèi)存稱為Multi-Page OR MemToLeave(multioPage allocator)

MemToLeave保留內(nèi)存=((CPU數(shù)量-4)+256)*0.5+256 約等于384MB

查看Memory CLERK的內(nèi)存使用情況可調(diào)用sys.dm_os_memory_clerks視圖


查看Buffer pool的內(nèi)存使用情況可調(diào)用sys.dm_os_buffer_descriptors視圖

查看各數(shù)據(jù)庫緩存情況
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


數(shù)據(jù)庫使用的總內(nèi)存:主要由buffer pool中用于緩存的內(nèi)存+從Buffer pool中借(stolen)的CLERK singlePage的內(nèi)存+MemToLeave(MultiPage)的內(nèi)存

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

或者使用性能計(jì)數(shù)器來查看SQLServer占用的內(nèi)存
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:
本質(zhì)上是一個(gè)堆,由Page allocator進(jìn)行分配,使用sys.dm_os_memory_objects來查看,使用page_allocator_address來與標(biāo)識(shí)memory clerk

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI