今回も Hekaton ではなく他の機能の紹介を。
SQL Server 2014 ではバッファプールを外部ディスクに拡張することができる機能が追加されています。
これにより、SSD やメモリストレージのような高速なドライブをバッファプールの拡張領域として使用することができるようになります。
BOL では Buffer Pool Extension に記載されています。
仕組みに関しては BOL の以下の図がわかりやすいですね。
L2 バッファプールの領域としてディスクを使用することが可能となります。
設定は ALTER SERVER CONFIGURATION を使用します。
Edition としては Enterprise x64で使用できるようですね。
新規に BUFFER POOL EXTENSIONS というオプションが追加されており、ON / OFF で有効無効を切り替えることができます。
BUFFER POOL EXTENSION { ON ( FILENAME = ‘os_file_path_and_name’ , SIZE = <size_spec> ) | OFF }
実際の構文としては以下のようになります。
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON (FILENAME = ‘E:SSDCACHEEXAMPLE.BPE’, SIZE = 1GB) ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION OFF |
設定をすると指定したディレクトリに拡張用のファイルが作成されます。
なお、設定に関してはレジストリ (HKLMSOFTWAREMicrosoftMicrosoft SQL Server<インスタンスID>MSSQLSERVER) に格納されています。
設定に関して Max Server Memory の設定値に影響がするようで、Max Server Memory の設定値によって設定可能な最少領域の閾値が変わってきます。
Max Server Memroy と適していないサイズを指定すると以下のようなエラーとなります。
Msg 868, Level 16, State 1, Line 1 Buffer pool extension size must be larger than the current memory allocation threshold 2048 MB. Buffer pool extension is not enabled. |
なお、一度設定した後は SQL Server のサービスの再起動をしないと設定したサイズが下限の閾値となります。
サイズを小さくしたい場合などは一度無効にして SQL Server のサービスを再起動する必要があります。
サポートとしては Max Server Memory としては 128GB 、バッファプールの拡張は Max Server Memory の 32 倍までとなるようですので、大規模なメモリを搭載している環境では使うことができないようです。
共用環境の SQL Server 設定しておくと、他の利用者のキャッシュによりバッファのキャッシュアウトが発生した場合のオーバーヘッドを減らすことができるのかもしれないですね。
この機能の追加により以下の DMV が追加されています。
sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
既存の DMV / パフォーマンスモニターも拡張されています。
sys.dm_os_buffer_descriptors (Transact-SQL)
Performance counters
以下のようなクエリを実行することで物理メモリ / 拡張領域のどちらにデータが載っているかを確認することができるようになっています。
SELECT page_type, is_in_bpool_extension, COUNT(*) * 8 [Size(KB)] FROM sys.dm_os_buffer_descriptors GROUP BY page_type, is_in_bpool_extension ORDER BY is_in_bpool_extension ASC |
拡張領域の使用状況の詳細についてはパフォーマンスモニターから確認することができます。
SSD にデータを置く / メモリの拡張領域として使用するのどちらの方が効果的なのかは検証する必要がありますが面白い機能ですね。