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

適用対象:AZURE SQL Managed Instance SQL Server 2016 (13.x) 以降のバージョン

この記事では、システムバージョン制御のメモリ最適化された時間テーブルを使用する際の具体的なパフォーマンス考慮事項について解説します。

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

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

すべての更新と削除は、内部メモリ最適化履歴テーブルに記録されます。 もしワークロードがこれら2つの操作を多用すると、予期せぬメモリ消費が発生するかもしれません。 次の点を考慮してください。

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

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

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

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