バッファー プール拡張Buffer Pool Extension

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2014 (12.x)SQL Server 2014 (12.x)で導入されたバッファー プール拡張は、不揮発性ランダム アクセス メモリ (ソリッドステート ドライブ) 拡張としての データベース エンジンDatabase Engine バッファー プールへのシームレスな統合を実現することで、I/O スループットを大幅に向上させます。Introduced in SQL Server 2014 (12.x)SQL Server 2014 (12.x), the buffer pool extension provides the seamless integration of a nonvolatile random access memory (that is, solid-state drive) extension to the データベース エンジンDatabase Engine buffer pool to significantly improve I/O throughput. バッファー プール拡張は、 SQL ServerSQL Server の一部のエディションでは使用できません。The buffer pool extension is not available in every SQL ServerSQL Server edition. 詳細については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。For more information, see Features Supported by the Editions of SQL Server 2016.

バッファー プール拡張の利点Benefits of the Buffer Pool Extension

SQL ServerSQL Server データベースの主な目的はデータの格納と取得であるため、データベース エンジンの主要な特性は頻繁なディスク I/O ということになります。The primary purpose of a SQL ServerSQL Server database is to store and retrieve data, so intensive disk I/O is a core characteristic of the Database Engine. ディスク I/O 操作は多くのリソースを消費するうえ、完了するのに比較的長い時間がかかるため、 SQL ServerSQL Server では I/O の効率を上げることに重点を置いています。Because disk I/O operations can consume many resources and take a relatively long time to finish, SQL ServerSQL Server focuses on making I/O highly efficient. バッファー プールは、 SQL ServerSQL Serverのプライマリ メモリの割り当て元となります。The buffer pool serves as a primary memory allocation source of SQL ServerSQL Server. バッファー管理は、この効率向上を実現するための重要なコンポーネントです。Buffer management is a key component in achieving this efficiency. バッファー管理コンポーネントは 2 つのメカニズムから構成されています。1 つはデータベース ページに対するアクセスと更新を行うバッファー マネージャーで、もう 1 つはデータベース ファイルの I/O 数を削減するためのバッファー プールです。The buffer management component consists of two mechanisms: the buffer manager to access and update database pages, and the buffer pool, to reduce database file I/O.

データ ページとインデックス ページがディスクからバッファー プールに読み込まれ、変更されたページ (ダーティ ページとも呼ばれます) がディスクに書き戻されます。Data and index pages are read from disk into the buffer pool and modified pages (also known as dirty pages) are written back to disk. サーバー チェックポイントおよびデータベース チェックポイントでメモリ不足が発生すると、バッファー キャッシュ内のホットな (アクティブな) ダーティ ページがキャッシュから削除され、機械式ディスクに書き込まれた後、再度キャッシュに読み込まれます。Memory pressure on the server and database checkpoints cause hot (active) dirty pages in the buffer cache to be evicted from the cache and written to mechanical disks and then read back into the cache. 通常、これらの I/O 操作は、4 ~ 16 KB という小規模なデータのランダム読み取り/書き込みです。These I/O operations are typically small random reads and writes on the order of 4 to 16 KB of data. 小規模なランダム I/O パターンの場合、頻繁なシークが発生して機械式ディスクのアームが動き続けるため、I/O 待機時間が長くなり、システムの総 I/O スループットが低下します。Small random I/O patterns incur frequent seeks, competing for the mechanical disk arm, increasing I/O latency, and reducing aggregate I/O throughput of the system.

このような I/O ボトルネックを解決するための一般的な方法は、DRAM を増設するか、または高パフォーマンス SAS スピンドルを追加する方法です。The typical approach to resolving these I/O bottlenecks is to add more DRAM, or alternatively, added high-performance SAS spindles. これらのオプションは効果的ですが、重大な欠点があります。DRAM は、データ ストレージ ドライブよりも高価です。スピンドル数を追加すると、ハードウェアの購入経費が増えるだけでなく、電力消費量の増加およびコンポーネントの故障の可能性の増加に伴い運用コストが増加します。While these options are helpful, they have significant drawbacks: DRAM is more expensive than data storage drives and adding spindles increases capital expenditure in hardware acquisition and increases operational costs by increased power consumption and increased probability of component failure.

バッファー プール拡張機能は、不揮発性ストレージ (通常は SSD) でバッファー プール キャッシュを拡張します。The buffer pool extension feature extends the buffer pool cache with nonvolatile storage (usually SSD). この拡張により、より大きなデータベースのワーキング セットをバッファー プールに格納でき、その結果、RAM と SSD の間の I/O のページングが強制的に実行されます。Because of this extension, the buffer pool can accommodate a larger database working set, which forces the paging of I/Os between RAM and the SSDs. これによって、小規模なランダム I/O の処理が実質的に機械式ディスクから SSD に移行されます。This effectively offloads small random I/Os from mechanical disks to SSDs. SSD は待機時間が短くランダム I/O のパフォーマンスに優れているため、バッファー プール拡張によって I/O スループットが大幅に向上します。Because of the lower latency and better random I/O performance of SSDs, the buffer pool extension significantly improves I/O throughput.

バッファー プール拡張機能の利点を次の一覧に示します。The following list describes the benefits of the buffer pool extension feature.

  • ランダム I/O のスループットの向上Increased random I/O throughput

  • I/O 待機時間の削減Reduced I/O latency

  • トランザクションのスループットの向上Increased transaction throughput

  • より大きなハイブリッド バッファー プールによる読み取りパフォーマンスの向上Improved read performance with a larger hybrid buffer pool

  • 現在および将来の低コストのメモリ ドライブを使用できるキャッシュ アーキテクチャA caching architecture that can take advantage of present and future low-cost memory drives

概念Concepts

バッファー プール拡張機能に関連する用語を次に示します。The following terms are applicable to the buffer pool extension feature.

ソリッドステート ドライブ (SSD)Solid-state drive (SSD)
ソリッドステート ドライブは、データをメモリ (RAM) に永続的に格納します。Solid-state drives store data in memory (RAM) in a persistent manner. 詳細については、 この定義を参照してください。For more information, see this definition.

バッファーBuffer
SQL ServerSQL Serverでは、バッファーはメモリ内の 8 KB のページで、データ ページやインデックス ページと同じサイズです。In SQL ServerSQL Server, A buffer is an 8-KB page in memory, the same size as a data or index page. したがって、バッファー キャッシュは 8 KB 単位のページに分割されます。Thus, the buffer cache is divided into 8-KB pages. バッファー マネージャーが別のデータを読み取るためのバッファー領域を必要とするまで、そのページはバッファー キャッシュ内に残ります。A page remains in the buffer cache until the buffer manager needs the buffer area to read in more data. データに変更が加えられた場合だけ、そのデータがディスクに書き戻されます。Data is written back to disk only if it is modified. これらのメモリ内の修正されたページは、"ダーティ ページ" と呼ばれます。These in-memory modified pages are known as dirty pages. ページは、ディスク上のデータベース イメージと等価であるときにクリーンです。A page is clean when it is equivalent to its database image on disk. バッファー キャッシュ内のデータは、ディスクに書き戻す前に何度でも変更できます。Data in the buffer cache can be modified multiple times before being written back to disk.

バッファー プールBuffer pool
バッファー キャッシュとも呼ばれます。Also called buffer cache. バッファー プールは、キャッシュされたデータ ページを利用するためにすべてのデータベースで共有されるグローバル リソースです。The buffer pool is a global resource shared by all databases for their cached data pages. バッファー プール キャッシュの最大サイズと最小サイズは、起動時か、または SQL Server のインスタンスが sp_configure を使用して動的に再構成されるときに決定されます。The maximum and minimum size of the buffer pool cache is determined during startup or when the instance of SQL server is dynamically reconfigured by using sp_configure. このサイズにより、実行中のインスタンスで任意のときにバッファー プールにキャッシュできる最大ページ数が決まります。This size determines the maximum number of pages that can be cached in the buffer pool at any time in the running instance.

バッファー プール拡張機能によってコミットできる最大メモリは、コンピューター上で実行中の他のアプリケーションが深刻なメモリ不足を引き起こした場合に、そのアプリケーションによって制限されることがあります。The maximum memory that can be comitted by Buffer Pool Extension can be limited by the other applications running on the machine in case those create significant memory pressure.

CheckpointCheckpoint
チェックポイントによって、予期しないシャットダウンやクラッシュの後の復旧中に、トランザクション ログに格納されている変更を データベース エンジンDatabase Engine が適用するための最適なポイントが作成されます。A checkpoint creates a known good point from which the データベース エンジンDatabase Engine can start applying changes contained in the transaction log during recovery after an unexpected shutdown or crash. チェックポイントは、変更されたページとトランザクション ログ情報をメモリからディスクに書き込み、さらにトランザクション ログに関する情報を記録します。A checkpoint writes the dirty pages and transaction log information from memory to disk and, also, records information about the transaction log. 詳細については、「データベース チェックポイント (SQL Server)」を参照してください。For more information, see Database Checkpoints (SQL Server).

バッファー プール拡張の詳細Buffer Pool Extension Details

SSD ストレージは、ディスク ストレージ サブシステムではなく、メモリ サブシステムの拡張として使用されます。SSD storage is used as an extension to the memory subsystem rather than the disk storage subsystem. つまり、バッファー プール拡張ファイルによって、バッファー プール マネージャーが DRAM と NAND フラッシュ メモリの両方を使用し、SSD を使用した不揮発性ランダム アクセス メモリ上に "微温" ページ用のはるかに大きなバッファー プールを保持できるようになります。That is, the buffer pool extension file allows the buffer pool manager to use both DRAM and NAND-Flash memory to maintain a much larger buffer pool of lukewarm pages in nonvolatile random access memory backed by SSDs. これにより、DRAM としてのレベル 1 (L1) と SSD 上のバッファー プール拡張ファイルとしてのレベル 2 (L2) から成る複数レベルのキャッシュ階層が作成されます。This creates a multilevel caching hierarchy with level 1 (L1) as the DRAM and level 2 (L2) as the buffer pool extension file on the SSD. データの安全性を維持するため、L2 キャッシュにはクリーンなページのみが書き込まれます。Only clean pages are written to the L2 cache, which helps maintain data safety. バッファー マネージャーは、L1 キャッシュと L2 キャッシュの間のクリーンなページの移動を処理します。The buffer manager handles the movement of clean pages between the L1 and L2 caches.

次の図は、バッファー プールのアーキテクチャを他の SQL ServerSQL Server コンポーネントに関連して示した概要図です。The following illustration provides a high-level architectural overview of the buffer pool relative to other SQL ServerSQL Server components.

SSD バッファー プール拡張機能のアーキテクチャSSD Buffer Pool Extension Architecture

有効な場合、バッファー プール拡張は、SSD 上のバッファー プール キャッシュ ファイルのサイズおよびファイル パスを指定します。When enabled, the buffer pool extension specifies the size and file path of the buffer pool caching file on the SSD. このファイルは SSD 上のストレージの連続的なエクステントで、 SQL ServerSQL Serverインスタンスの起動時に静的に構成されます。This file is a contiguous extent of storage on the SSD and is statically configured during startup of the instance of SQL ServerSQL Server. ファイルの構成パラメーターの変更は、バッファー プール拡張機能が無効になっている場合にのみ実行できます。Alterations to the file configuration parameters can only be done when the buffer pool extension feature is disabled. バッファー プール拡張を無効にすると、すべての関連する構成設定がレジストリから削除されます。When the buffer pool extension is disabled, all related configuration settings are removed from the registry. バッファー プール拡張ファイルは、SQL Server インスタンスがシャットダウンされると削除されます。The buffer pool extension file is deleted upon shutdown of the instance of SQL Server.

ベスト プラクティスBest Practices

次のベスト プラクティスに従うことをお勧めします。We recommend that you follow these best practices.

  • 初めてバッファー プール拡張を有効にした後は、パフォーマンス上の利点を最大限に活用するために SQL Server インスタンスを再起動することをお勧めします。After enabling Buffer Pool Extension for the first time it is recommended to restart the SQL Server instance to get the maximum performance benefits.

  • バッファー プールの拡張サイズは、最大で max_server_memory の値の 32 倍に設定できます。The buffer pool extension size can be up to 32 times the value of max_server_memory. 物理メモリのサイズ (max_server_memory) とバッファー プール拡張のサイズの比率を 1:16 以下にすることをお勧めします。We recommend a ratio between the size of the physical memory (max_server_memory) and the size of the buffer pool extension of 1:16 or less. 1:4 ~ 1:8 の範囲の低い比率が最適な場合もあります。A lower ratio in the range of 1:4 to 1:8 may be optimal. max_server_memory オプションの設定の詳細については、「 サーバー メモリーに関するサーバー構成オプション」を参照してください。For information about setting the max_server_memory option, see Server Memory Server Configuration Options.

  • 運用環境で実装する前にバッファー プール拡張を徹底的にテストします。Test the buffer pool extension thoroughly before implementing in a production environment. 運用環境では、ファイルの構成を変更したり、機能をオフにしたりしないでください。Once in production, avoid making configuration changes to the file or turning the feature off. これらの操作を行うと、機能が無効にされたときにバッファー プールのサイズが大幅に縮小されるため、サーバー パフォーマンスにマイナスの影響がある場合があります。These activities may have a negative impact on server performance because the buffer pool is significantly reduced in size when the feature is disabled. 無効にすると、SQL Server のインスタンスが再起動されるまで、機能をサポートするために使用されたメモリが再利用されません。When disabled, the memory used to support the feature is not reclaimed until the instance of SQL Server is restarted. しかし、機能を再度有効にすると、インスタンスを再起動しなくてもメモリが再利用されます。However, if the feature is re-enabled, the memory will be reused without restarting the instance.

バッファー プール拡張に関する情報の取得Return Information about the Buffer Pool Extension

次の動的管理ビューを使用して、バッファー プール拡張の構成を表示し、拡張のデータ ページに関する情報を取得できます。You can use the following dynamic management views to display the configuration of the buffer pool extension and return information about the data pages in the extension.

SQL Server ではパフォーマンス カウンターが用意されており、Buffer Manager オブジェクトを使用して、バッファー プール拡張ファイル内のデータ ページを追跡することができます。Performance counters are available in the SQL Server, Buffer Manager Object to track the data pages in the buffer pool extension file. 詳細については、「 バッファー プール拡張のパフォーマンス カウンター」を参照してください。For more information, see buffer pool extension performance counters.

次の XEvent を使用できます。The following Xevents are available.

XEventXEvent [説明]Description パラメーターParameters
sqlserver.buffer_pool_extension_pages_writtensqlserver.buffer_pool_extension_pages_written ページまたはページのグループがバッファー プールから削除され、バッファー プール拡張ファイルに書き込まれると発生します。Fires when a page or group of pages are evicted from the buffer pool and written to the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_readsqlserver.buffer_pool_extension_pages_read ページがバッファー プール拡張ファイルからバッファー プールに読み取られると発生します。Fires when a page is read from the buffer pool extension file to the buffer pool. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_extension_pages_evictedsqlserver.buffer_pool_extension_pages_evicted ページがバッファー プール拡張ファイルから削除されると発生します。Fires when a page is evicted from the buffer pool extension file. number_pagenumber_page

first_page_idfirst_page_id

first_page_offsetfirst_page_offset

initiator_numa_node_idinitiator_numa_node_id
sqlserver.buffer_pool_eviction_thresholds_recalculatedsqlserver.buffer_pool_eviction_thresholds_recalculated 削除しきい値が計算されると発生します。Fires when the eviction threshold is calculated. warm_thresholdwarm_threshold

cold_thresholdcold_threshold

pages_bypassed_evictionpages_bypassed_eviction

eviction_bypass_reasoneviction_bypass_reason

eviction_bypass_reason_descriptioneviction_bypass_reason_description
タスクの説明Task Description トピックTopic
バッファー プール拡張を有効化および構成するEnable and configure the buffer pool extension. ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
バッファー プール拡張の構成を変更するModify the buffer pool extension configuration ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)
バッファー プール拡張の構成を表示するView the buffer pool extension configuration sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)sys.dm_os_buffer_pool_extension_configuration (Transact-SQL)
バッファー プール拡張を監視するMonitor the buffer pool extension sys.dm_os_buffer_descriptors (Transact-SQL)sys.dm_os_buffer_descriptors (Transact-SQL)

パフォーマンス カウンターPerformance counters