トランザクション ログ ファイルは、SQL Server 2022 年 In-Memory OLTP を使用するデータベースに対して拡張されます

現象

SQL Server 2022でデータベースでインメモリ OLTP 機能が有効になっていると、トランザクション ログ ファイルが継続的に拡大していることがわかります。 さらに、SQL Server エラー ログには、 のようなClose thread is falling behind: 4 checkpoints outstandingメッセージが含まれる場合があります。

SQL Server インスタンスを再起動すると、データベースの復旧プロセスが完了するまでに長い時間がかかる場合があります。

sys.databases と sys.dm_db_xtp_checkpoint_statsに関する問題のトラブルシューティング

  • カタログ ビュー sys.databases を使用して情報を収集し、この問題のトラブルシューティングを行うと、長い切り捨ての理由として列 log_reuse_wait_desc が表示 XTP_CHECKPOINT されます。 この値は、トランザクション ログが OLTP (旧称 Hekaton) チェックポイント In-Memory が発生するのを待機していることを示します。 チェックポイント処理の遅延が示唆され、パフォーマンスやログ ファイルの増加に影響する可能性があります。

  • SQL Server動的管理ビュー (DMV) sys.dm_db_xtp_checkpoint_statsを使用して情報を収集し、この問題のトラブルシューティングを行うと、列outstanding_checkpoint_countに長時間の 0 以外の値が表示されます。 チェックポイントが効率的に発生せず、パフォーマンスとログ ファイルの増加に影響を与える可能性があることを示します。

原因

SQL Server 2022 では、メモリ不足状態を減らすために、大きなメモリ サーバーのメモリ管理を改善する新機能が導入されました。 この変更の既知の問題は、「 現象 」セクションで説明されている動作につながる場合があります。

解決方法

この問題を解決するには、次の手順に従います。

  1. SQL Server インスタンスのスタートアップ パラメーターとして -T9810 を追加します。
  2. インスタンスを再起動します。
  3. チェックポイントを発行し、ログ バックアップを作成し、監視 log_reuse_wait_descし、必要に応じてログを圧縮して領域を解放します。

詳細

トレース フラグ 9810 は、In-Memory OLTP エンジンがスレッド ローカル ストレージ (TLS) メモリを解放することを無効にし、SQL Server 2019 の動作に戻します。