本篇文章給大家分享的是有關MSSQL內存架構及管理是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1. MSSQL內存架構
相比較Oracle,MSSQL的內存區域并沒那么清晰,但和Oracle類似,MSSQL內存區域大體也可以分為三個部分:buffer pool,query/workspace memory,其他cache/memory。下面,我們分別對這三個內存區域做簡要介紹:
1) Bufferpool:
,case database_id
else db_name(database_id)
,count(*)*8/1024 as 'cached size (MB)'
group by db_name(database_id),database_id
2) Query/workspacememory:
類似Oracle的PGA,MSSQL中,query memoy(也稱為workspace memory)用于存儲查詢執行時哈希和排序期間的臨時結果。雖然大家都知道Oracle的PGA,但MSSQL的query memory也許并沒有太多文檔可讀,因此,也并沒有太多人清楚和知道,包括MSSQL的background process,memory components等內部的一些細節和內容,都是這種現狀,這也許和多方面因素相關,這里不做太多的探討。但是,當你仔細的查看MSSQL中SQL語句的查詢計劃時,你會清楚的看到hash和sort等操作相關的query memory內容。
Query memory空間可以占到buffer pool大小的25%和75%之間,但是,當buffer pool不存在內存壓力時,query memory也可以進一步增長。對于所有代價低于3和query memory需求低于5M的小查詢,其query memory可以為之保留整個query memory5%的空間。單個查詢最多能占到整個query memory的20%以保證其他查詢的正常執行,這點來說,與Oracle的PGA非常類似??梢酝ㄟ^以下SQL語句來獲取查詢語句的query memory及相關授權情況:
select session_id,sql_handle,grant_time,requested_memory_kb
from sys.dm_exec_query_memory_grants
,sum(isnull(granted_memory_kb,0))granted_memory_kb
from sys.dm_exec_query_memory_grants
3) 其他cache/memory:
MSSQL內存區域,除了上面講述的buffer pool和query/workspace memory外,剩下的那就是其他cache/memory部分,該部分內存用于MSSQL中所有不能放于前述兩個內存區域的內存組件。這部分雖然不像Oracle中定義的那么清晰,但基本相當于Oracle中的SGA中除去buffer pool外的其他組件,這其中,主要是shared pool。該部分區域,雖然占據的內存不多,但包含眾多的內存組件,也很重要。我們可以通過以下SQL語句來查詢其相關信息:
select [name],[type],pages_kb,entries_count
select name,value,value_in_use,[description]
where namelike'%server memory%'
page_fault_count,memory_utilization_percentage,
process_virtual_memory_low
以上就是MSSQL內存架構及管理是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。