バッチ モード処理と大きなページ メモリ モデルの間の相互運用性の問題
この記事は、SQL Server の大きなページ メモリ モデルを使用した列ストアと行ストアでのバッチ モード処理の使用によって発生するパフォーマンスと安定性の問題を解決するのに役立ちます。
元の製品バージョン: SQL Server 2012、SQL Server 2014、SQL Server 2016、SQL Server 2017、SQL Server 2019、SQL Server 2022
元の KB 番号: 3210239
現象
SQL Server のインスタンスでは、スタートアップ フラグとして trace フラグ 834 または trace フラグ 876 を使用します。 この操作を実行して、SQL Server メモリ マネージャーによる大きなページ割り当てを有効にして、64 ビット インスタンスのパフォーマンスを向上させることができます。
行ストアで 列ストア インデックス または バッチ モードの処理を使用します。
このシナリオでは、次の 1 つ以上の問題が発生します。
SQL Server エラー ログの非生成スケジューラ エラーと関連するメモリ ダンプ。
バッチ モード処理を使用するクエリでは、重大なパフォーマンスの問題が発生する可能性があります。
SQL Server エラー ログのアクセス違反例外と関連するメモリ ダンプ。
sp_createstats
を実行すると、次のエラー メッセージが表示されることがあります。There is insufficient system memory in resource pool 'default' to run this query
回避策
これらの問題を軽減するには、次の 2 つの方法のいずれかまたは両方を試してください。
SQL Server インスタンスの SQL Server スタートアップ パラメーターから trace フラグ 834 (
-T834
) を削除して、大きなページ メモリ モデルを無効にします。 この手順を完了すると、SQL Server はlarge page
メモリ モデルの使用を停止し、conventional
またはlock pages
メモリ モデルに戻ります。SQL Server で列ストア インデックスを使用せず、説明されている現象が発生した場合は、
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = OFF
を使用して、データベース レベルで行ストアのバッチ モードを無効にすることができます。 詳細については、「ALTER DATABASE SCOPED CONFIGURATION」を参照してください。