SQL SERVER Buffer Pool擴充套件

2022-03-31 20:05:55 字數 2764 閱讀 2859

buffer pool擴充套件是buffer pool 和非易失的ssd硬碟做連線。以ssd硬碟的特點來提高隨機讀效能。

在buffer pool 擴充套件之前,sql server 從磁碟中讀入資料,並且存放在buffer pool中以供讀取和修改,修改完之後髒資料還是放在buffer pool中,當記憶體緊張時,lazy write把髒資料寫入磁碟,並且釋放記憶體頁。當再次使用當前資料時,再一次從磁碟讀取資料到記憶體。這樣會導致大量的io操作,影響效能。對於這類io操作頻繁造成的效能問題,我們通常採用的方法是加記憶體,較少io操作。

sql server 2014新增加了buffer pool的擴充套件特性,使用ssd硬碟擴充套件快取容量;

ssd作為buffer pool的擴充套件,可以很好的解決因頻繁讀取資料引發的系統大量io操作問題。 buffer pool在ssd上建立乙個緩衝檔案,該檔案與記憶體一起構成多層的快取區,如下圖:

其中第一層為記憶體構成的緩衝池,第二層為擴充套件的後備儲存區。在l2上只儲存乾淨的資料,為讀提供快取,不提供髒資料的快取。這樣的設計讓我們不用擔心ssd出現損壞的情況,當ssd出現損壞時,只是我們的快取結構回到了加擴充套件前的狀態,之前快取在ssd上的資料,只需要從磁碟上再讀取進記憶體。

alter server configuration

set buffer pool extension on

(filename = 'i:\example.bpe', size= 4gb )

執行該命令後,在ssd盤上回生成乙個example的檔案,如下圖:

撤銷緩衝池擴充套件後,將從登錄檔中刪除所有相關的配置設定。sql server 例項關閉時,將會刪除緩衝池擴充套件檔案。

設定快取區的時候,緩衝池擴充套件大小最大可為 max_server_memory 值的 32 倍。建議物理記憶體 (max_server_memory) 的大小與緩衝池擴充套件的大小之比不應超過 1:16。 介於 1:4 至 1:8 之間的比率是最佳的。

為了驗證buffer pool擴充套件的作用,我們做了3個場景的資料讀取,並對比磁碟物理讀取次數與執行時間。

該種場景是在語句執行時,資料儲存在磁碟上,執行步驟如下:

從上圖可以看出,當資料在磁碟上時,該查詢執行了2次物理讀即從磁碟讀取了2頁的資料。

從上圖可以看出,該語句讀持續了169毫秒。

該種場景是在語句執行時,資料在記憶體快取上:

從上圖可以看出,當資料在記憶體快取上時,該查詢執行了0次物理讀。

從上圖可以看出,該語句讀持續了2毫秒。

該種場景是在語句執行時,資料儲存在buffer pool擴充套件 ssd硬碟上:

定位當前查詢的資料所在的頁,執行查詢,使用 %%physloc%%獲取當前記錄行對應的標記資訊(0x85e5000001000000)

標記資訊是十六進製制,將其轉換為十進位制數字,該標記0x後8為表示所在的頁號;在轉換的過程中這8位數字需要做個順序調整,如上圖中的值(0x85e5000001000000)需要轉換為如下計算方式:

select cast(0x0000e585 as int )

獲取頁號後執行如下語句檢視該頁在buffer pool 中的情況。

select * from sys.dm_os_buffer_descriptors a where  a.page_id='58757'

從如上執行結果可以看出,58757 頁對應的is_in_bpool_extension值為1,說明該頁儲存在buffer pool 擴充套件上。

執行查詢語句,檢視io資訊,如下圖:

從上圖可以看出,當資料在buffer pool 擴充套件有快取時,該查詢執行了0次物理讀。

從上圖可以看出,該語句讀持續了49毫秒。

通過同一環境中的如上三個場景測試,測試結果如圖:

物理讀次數

持續時間

資料頁在磁碟

2次169毫秒

資料頁快取在記憶體

02毫秒

資料頁快取在ssd buffer pool擴充套件

049毫秒

通過如上測試,我們知道使用ssd buffer pool擴充套件後,當記憶體不足時記憶體中的乾淨資料會移至ssd buffer pool擴充套件上,此時再次讀取這些資料的時候降低了io操作,並且讀取時間較直接從硬碟讀取資料快。

dilated convolutions 擴張卷積

最近在閱讀 context encoding for semantic segmentation 中看到應用了dilated convolutions。擴張卷積與普通的卷積相比,除了卷積核的大小以外,還有乙個擴張率 dilation rate 引數,主要用來表示擴張的大小。擴張卷積與普通卷積的相同點...

關於 qtpropertybrowser 擴充套件問題

qtpropertybrowser 是乙個基於qt開發的屬性展示控制項,功能強大。在windows平台,使用vc編譯工具,如果將qtpropertybrowser 此庫編譯成dll時,在程式中直接使用原始類沒有問題,但如果自定義派生類且使用到訊號槽時就會遇到乙個編譯問題,這個問題歸根結底在於有沒有使...

擴號匹配問題

描述 在某個字串 長度不超過 100 中有左括號 右括號和大小寫字母 規定 與常見的 算術式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註 不能匹配的右括號用 標註。輸入...