SQL Serverは、再起動するまで時間が経過すると遅くなります


8

OLAP / OLTPのワークロードが混在するデータベースがあります。クエリは非常にアドホックであり、中間層アプリケーションサーバーで動的に作成されます。サーバーを起動すると、パフォーマンスは許容範囲内ですが、使用可能なすべてのメモリ(30GB)がなくなるまで、メモリ消費量はどんどん増えます。その後、システムはますます遅くなります。

のようなコマンドDbcc freeproccacheは効果がありません。

トランザクションは多くありませんselect * from sys.dm_tran_session_transactions(システムが正常な場合を超えない)。このリストが空の場合もあります。

の最初の結果dbcc memorystatus

VM Reserved               42136628
VM Committed               1487176
Locked Pages Allocated    24994048
Reserved Memory               1024
Reserved Memory In Use           0

SQL Serverを再起動すると、しばらくの間問題が解決します。

  1. この動作の原因は何ですか?どうすればそれを回避できますか?
  2. 原因の実際の解決策が難しすぎる場合、DBMSを完全に再起動せずにSQL Serverにすべてのメモリを実際に解放させるコマンドはありますか?

サーバーは専用のハードウェア(VMではなく)で実行されています。スケジュールされたジョブがいくつかありましたが、変更なしでしばらく無効にしました。同じサーバー上で実行されている他の中間層アプリケーションがありますが、それらは2GB以下のメモリ、ごくわずかなCPU、ほとんどI / Oを使用しません。そのようなアプリケーションはすべて変更せずに再起動しました。

回答:


10

このサーバーでパフォーマンスメトリックを収集することをお勧めします。そうすることで、これらのタイプの問題のトラブルシューティングから当て推量を排除できます。どこから始めればよいかわからない場合は、この記事でより完全なガイドを参照してください。

特に、パフォーマンスカウンターMemory\Available MBytesを確認しPaging File(_Total)\% Usageます。問題が発生するのは、バッファープールがいっぱいになったときだけです。これらのカウンターから返される数値は、サーバーに割り当てられている物理メモリの量に応じて、最大サーバーメモリ設定を調整する必要があることを示している可能性があります。私が述べたように、ここで、私はのための推測として以外の物理メモリの量の最大メモリの設定を基づかお勧めしません出発点。常に結果を測定し、そこから調整します。

空きメモリの量が少なすぎる(<500)、またはページファイルの使用量がゼロを超えている場合、SQL Serverインスタンスがオーバーコミットされている可能性があります。SQLServer 2008 R2では、最大サーバーメモリ設定はバッファプールサイズのみを制御します、およびプランキャッシュなどの他のメモリ使用量ではありません。SQL Serverは、システムで実行している可能性のある他のアプリケーションも考慮しません。この余分なメモリ使用量は、Windowsまたは他のアプリケーションにメモリの負荷をかける可能性があり、ディスクの交換につながる可能性があります。これは、特にページファイルが単純なRAID 1ミラーによってバックアップされたボリュームに存在する場合は、どうしても避けたいものです。これは問題であり、サーバーの最大メモリ設定をバックオフすることで問題が解決するはずです。

空きメモリの量が多く(> 1000)、ページファイルの使用量がゼロの場合、サーバーのメモリ使用量を最大化するために、おそらく最大サーバーメモリを少し(256 MB単位で)増やすことができます。ただし、これで問題が解決する可能性はほとんどありません。おそらく物理ディスクカウンターとバッファープールページの予想寿命を調べる必要があります。クエリがバッファプールをスラッシングしている場合は、ディスクのパフォーマンスを改善するか、サーバーで使用できる物理メモリの量を増やしてすべてのデータページを一度にメモリに収めることができるか、データベースをあまり使用しないように変更する以外に何もできません物理スペース(おそらく、行またはページの圧縮を使用するか、より高いインデックスを再構築することによってFILLFACTOR)。

このトピックに関する記事をここに公開し、この問題とその解決方法について詳しく説明します。


1

データベースページがキャッシュに移動するとパフォーマンスが向上するため(ページの平均余命とバッファヒット率は時間とともに増加します)、最大メモリを(total_physical_mem-2GB)に設定しているので、通常、時間の経過に伴う速度低下の傾向は逆になります。

いくつかのクエリが原因で、SQL Serverが多くのことをページアウトおよびページインしているようです。あなたは試みることができるリソースガバナをアプリケーションが利用できる十分なバッファを持って常に問い合わせるように、大きなクエリと媒質のもののメモリ消費量を制限します。


2
リソースガバナーのメモリ制限はクエリメモリのみを制御し、バッファプールメモリは制御しません。
Jon Seigel 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.