SQL Server 2022 のインメモリ OLTP を使用するデータベースのトランザクション ログ ファイルが拡張される
現象
SQL Server 2022 でデータベースで In-Memory 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) チェックポイントの発生を待機していることを示します。 チェックポイント操作の遅延が提案され、パフォーマンスやログ ファイルの増加に影響する可能性があります。SQL Server 動的管理ビュー (DMV) sys.dm_db_xtp_checkpoint_stats を使用して情報を収集し、この問題のトラブルシューティングを行う場合、
outstanding_checkpoint_count
列には、長期間にわたって 0 以外の値が表示されます。 チェックポイントが効率的に発生せず、パフォーマンスとログ ファイルの増加に影響を与える可能性があることを示します。
原因
SQL Server 2022 では、メモリ不足の状態を減らすために、大規模なメモリ サーバーのメモリ管理を改善する新機能が導入されました。 この変更の既知の問題は、「 Symptoms 」セクションで説明されている動作につながる場合があります。
解決方法
この問題を解決するには、次の手順に従います。
- SQL Server インスタンスのスタートアップ パラメーターとして -T9810 を追加します。
- インスタンスを再起動します。
- チェックポイントを発行し、ログ バックアップを作成し、
log_reuse_wait_desc
を観察し、領域を再利用するために必要な場合はログを圧縮します。
Note
この問題は、sql Server 2022 の Cumulative Update 7 で修正されました。
詳細
trace フラグ 9810 は、インメモリ OLTP エンジンがスレッド ローカル ストレージ (TLS) メモリを再利用することを無効にし、SQL Server 2019 の動作に戻します。