ディスク ベース テーブル ストレージとメモリ最適化テーブル ストレージの比較
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
カテゴリ | ディスク ベース テーブル | 持続性のあるメモリ最適化テーブル |
---|---|---|
DDL | メタデータ情報は、データベースのプライマリ ファイル グループのシステム テーブルに格納され、カタログ ビューを使用してアクセスできます。 | メタデータ情報は、データベースのプライマリ ファイル グループのシステム テーブルに格納され、カタログ ビューを使用してアクセスできます。 |
構造 | 行は 8 KB 単位のページに格納されます。 1 ページには同じテーブルの行だけが格納されます。 | 行は個別の行として格納されます。 ページ構造はありません。 データ ファイル内の連続する 2 行はそれぞれ別のメモリ最適化テーブルに属することができます。 |
インデックス | インデックスは、データ行と同様のページ構造に格納されます。 | (インデックス行ではなく) インデックス定義のみが保存されます。 インデックスはメモリ内に保持され、データベース再起動の一部としてメモリ最適化テーブルがメモリに読み込まれるときに再生成されます。 インデックス行は持続しないので、インデックスの変更に対してログ記録は実行されません。 |
DML 操作 | 最初の手順は、ページを見つけてバッファー プールに読み込むことです。 [挿入] SQL Server は、クラスター化インデックスの行の順序のページに行を挿入します。 削除 SQL Server は、ページ上の削除する行を検索し、削除のマークを付けます。 更新する SQL Server は、ページ上の行を検索します。 更新は非キー列に対してインプレースで実行されます。 キー列の更新は削除と挿入操作によって実行されます。 DML 操作の完了後、影響を受けるページは、最小ログ記録操作のバッファー プール ポリシー、チェックポイント、またはトランザクション コミットの一部としてディスクにフラッシュされます。 ページに対する読み書きの両方で不要な I/O が発生します。 |
メモリ最適化テーブルの場合、データがメモリに格納されるので、DML 操作はメモリ内で直接実行されます。 メモリ最適化テーブルのログ レコードを読み取ってデータ ファイルとデルタ ファイルに保存するバックグラウンド スレッドがあります。 更新では新しい行バージョンが生成されます。 ただし、更新は削除としてログに記録され、その後に挿入が続きます。 |
データの断片化 | データ操作のフラグメント データにより、一部分しか入力されていないページや、ディスクでは連続していない論理的に連続するページが生じる可能性があります。 これにより、データ アクセスのパフォーマンスが低下するため、データのデフラグが必要になります。 | メモリ最適化データはページに格納されないので、データの断片化はありません。 ただし、行が更新または削除されると、データ ファイルとデルタ ファイルは圧縮が必要になります。 これは、マージ ポリシーに基づいて、バックグラウンドの MERGE スレッドで実行されます。 |