[SQL2014]Buffer Pool Extension
「Buffer Pool Extension」這個是 SQL Server 2014 預計要新增的一個功能,不知道會翻譯成為甚麼名稱,姑且我就先叫他「緩存擴展」吧。
第一次接觸到這個名稱是看北美 Teched 2013 的影片中所得知的,當下只知道可以擴充 Buffer Pool 到 SSD 上面,也就沒有特別注意了。而這幾天剛好看到 SQL Server 2014 CTP 1 的版本已經上市了 ( 網址 ) ,如果沒有足夠的測試但又想要測試的話,也可以在 Azure VM 上直接選擇一個 SQL 2014 的範本建立來使用,算是非常的方便。而為了測試公司產品的相容性,我在內部的主機上建立一個 Windows 2012 的 VM ,下載 ISO 檔案來進行安裝。
圖片取自 MSDN
目前安裝起來的版號還是 11.0.9120,看起來跟 SQL Server 2012 SP1 的 11.0.3000 應該大體上差異不大,安裝過程中目前還沒看到有 SSDT 新的版本在當中,因此想要知道是否在 SSIS , SSRS 這些上面有沒有新增甚麼元件或功能,可能就還要再等一陣子新的版本出來。
回到正題「Buffer Pool Extension」,從網路上相關資料( (Almost) Everything You Need to Know About SQL Server 2014 ) 和 MSDN 上的說明,這樣技術主要會運用在配合 SSD 彌補主機記憶體不足夠讓 Buffer 使用的狀況下,利用 SSD 快速讀寫的特定成為 RAM 和實體磁碟中的第二道 Cache。由於在新的 SQL Server 技術中,資料檔案除了以往放在本機電腦的磁碟或掛載進來使用的 LUN 上面之外,還可以放在之前 SMB 的 File Server 之上,現在還可以透過 Internet 將檔案放置在雲端的主機上,像是利用以下的語法所建立的資料庫
CREATE DATABASE foo
ON (NAME = foo_dat, FILENAME = 'https://internetstorage.windows.net/data/foo.mdf' )
LOG ON (NAME = foo_log, FILENAME = 'https://internetstorage.windows.net/data/foolog.ldf')
會因為主機既有的 Buffer Pool 不夠大的狀況下,可能會因為 I/O 而降低效能,因此在這個狀況下,利用 Buffer Pool Extension 的技術,將會是不錯的解決方案。
原本我是參考 DBI-206 課程投影片上所介紹的語法,但一直出現錯誤,後來透過查看 MSDN 上的說明 「ALTER SERVER CONFIGURATION」,發覺語法有點不同,正確要建立緩存擴展的話,則使用類似以下的語法:
ALTER SERVER CONFIGURATION SET
BUFFER POOL Extension ON ( FILENAME='D:\Cache\SSDCahce.BPE', SIZE=32 GB)
要指定 SSD 上所存放的檔案名稱和所使用的大小,其中這個 Size 要注意一下,如果設定比目前所使用的緩存大小還小的話,則會出現類似以下的訊息
Msg 868, Level 16, State 1, Line 1
Buffer pool extension size must be larger than the current memory allocation threshold 3426 MB. Buffer pool extension is not enabled.
如果不需要使用的話,則可以用以下的語法來關閉緩存擴展
ALTER SERVER CONFIGURATION SET BUFFER POOL Extension OFF
知道了基本語法之後,那再來我們要來考慮到一些異常狀況,一般來說大家對於 SSD 的看法都認為他便宜、速度快,但都很怕 SSD 會忽然掛掉而造成資料損失。因此在這裡我先模擬當 SSD 的磁碟離線無法使用的狀況下,那麼 SQL Server 會如何呢 ?
的確在開啟的時候,SQL Server 會因為設定而重新建立那個緩存擴展的檔案,但因為該磁碟機已經先被我離線了,所以這裡就會出現有錯誤的訊息,但之後 SQL Server 仍然可以正常啟動和使用,不會因為沒有緩存擴展的空間而無法使用,只是無法使用到那樣的效果而已。因此如果有大型的資料庫需要處理,又不敢把資料庫移到 SSD 上面存放的話,看起來利用緩存擴展應該會是個不錯的選擇方案。