システムでバージョン管理されたメモリ最適化テンポラル テーブルのパフォーマンス

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

この記事では、システム バージョン管理およびメモリ最適化されたテンポラル テーブルを使用する場合のパフォーマンスに関するいくつかの考慮事項について説明します。

既存の非テンポラル テーブルにシステム バージョン管理を追加すると、履歴テーブルが自動的に更新されるため、更新操作および削除操作のパフォーマンスに影響が及ぶ可能性があります。

パフォーマンスに関する考慮事項

すべての更新と削除は、内部メモリ最適化履歴テーブルに記録されます。 ワークロードでこれら 2 つの操作が大量に使用されている場合、予期しないメモリ消費が発生する可能性があります。 したがって、以下の考慮事項に留意してください。

  • 1 回の手順で現在のテーブルから大量の削除を実行しないでください。 データの削除は、ssp_xtp_flush_temporal_history で手動で呼び出したデータ フラッシュを途中で使用して複数のバッチに分けて実行するか、SYSTEM_VERSIONING = OFF のときに実行することを検討してください。

  • 一度に大量のテーブルの更新を実行しない。そのような操作を実行すると、非テンポラル メモリ最適化テーブルの更新操作と比較して 2 倍の量のメモリが消費される場合があります。 メモリ消費量が 2 倍になる状態は一時的なものです。これは、定期的にデータ フラッシュ タスクが実行され、計画された境界内の内部ステージング テーブルのメモリ消費量が安定状態に保たれるためです。 境界は、現在のテンポラル テーブルのメモリ消費量の 10% です。 大量の更新は、複数のバッチに分けて実行するか、SYSTEM_VERSIONING = OFF のときに実行してください (更新プログラムを使用して、新しく追加された列の既定値を設定するなど)。

データ フラッシュ タスクのアクティブ化の期間は構成できませんが、必要に応じて sp_xtp_flush_temporal_history を手動で実行することができます。

履歴データに対して集計またはウィンドウ関数を使用する分析クエリを実行する場合は特に、クラスター化列ストアをディスクベースの履歴テーブルのストレージ オプションとして使用することを検討してください。 その場合、クラスター化列ストア インデックスは、履歴テーブルに最適な選択肢です。 クラスター化列ストア インデックスは、適切なデータ圧縮を提供し、履歴データの生成方法に合わせて挿入操作に対応 する方法で動作します。