0

問題

単一のデータベースがインストールされた顧客 VM に SQL Server 2017 データベースをデプロイしています。データベースには、ピーク時に約 100 人のアクティブ ユーザーが接続する単一の Web アプリケーションがあります。過去数か月間、顧客は 5 日間の使用後に SQL Server インスタンスを再起動する必要がありました。これは、アプリケーションのパフォーマンス低下の兆候が見られるようになったためです (ページの読み込みに 1 秒かかり、同じページの読み込みに 15 秒かかることがあります)。数か月間クエリ ストアを監視し、クエリのパフォーマンスを最適化してきましたが、週末にかけてデータベースでパフォーマンスの問題が発生するのを防ぐことはできません。

問題が存在する場合 (5 日間のアップタイム後)、サーバーは CPU とメモリの使用率が高いことを示しますが、実行されるクエリの頻度とクエリの種類は 1 週間を通してまったく同じです。問題が発生しているときにクエリ ストアを確認したところ、長時間実行されているクエリは見られず、アプリケーションが正常に実行されている日よりも CPU またはメモリの分析チャートで高い値を示しているものはありません。

私が気づいたことの 1 つは、内部/デフォルトのリソース プールの使用量が 1 週間を通して増加していることです。再起動後すぐに、リソース プールの使用率が低いように見えます。 ここに画像の説明を入力

5 日後、リソース プールはかなり高く見えます。 ここに画像の説明を入力

クエリを実行すると、クエリの実行中にリソース プールが増加しますが、メモリは常にクエリの実行が終了した後に解放されることに気付きました。これは顧客インスタンスで適切に行われていないように見えます。プールは時間の経過とともに増加します。

質問

リソース プールの使用量が時間の経過とともに増加しているため、パフォーマンスの問題が発生する可能性がありますか?

リソース プールのメモリが解放されない原因は何ですか?

私たちが直面しているパフォーマンスの問題を軽減するために実装したことは次のとおりです。

  1. READ_COMMITTED_SNAPSHOT 分離を有効にすると、ロックが原因でアプリケーションが応答しなくなったように見える問題を軽減するのに役立ちました。
  2. 最大サーバー メモリを設定して、OS が不足しないようにします。
  3. CPU の実行時間と論理読み取りを減らすために一連のクエリを最適化し、インデックスを追加するのに数か月を費やしました。
4

1 に答える 1