web-dev-qa-db-ja.com

SQL Serverが99%のメモリ使用率に達するとパフォーマンスが低下する

8 GBのRAMが99%使用されたと報告するサーバーがあります。 SQL Serverを再起動すると、使用率は約5%まで下がりますが、約2時間で99%まで徐々に増加します。

私がsqlserverプロセスを見ると、100k ramのみを使用していると報告されており、通常、その数を大幅に上回ったり下回ったりすることはありません。実際、タスクマネージャーのすべてのプロセスを合計しても、利用可能な合計の表面をかろうじて引っ掻いているだけです(まだ、タスクマネージャーは、「すべてのプロセスが表示されています」という99%のメモリ使用量を示しています)。

SQL Serverで大量のメモリリークが発生しているようですが、報告されていません。サーバーは2年間近く正常に動作しており、これは過去3〜4週間で現れ始めました。

誰かこれを見て、問題について洞察を持っていますか?

[〜#〜]編集[〜#〜]

サーバーが99%に達すると、パフォーマンスは低下します。サーバー、アプリなどへのクエリはすべてクロールされます。サービスを再起動すると、2時間経過してサーバーが再び99%に到達するまで、状況は再び不安定になります。

7
user2125551

SQLサーバーはできるだけ多くのデータをキャッシュします-これは他の人が良いことを言っているのと同じです。キャッシュしているこのデータは、バッファキャッシュと呼ばれますが、これを制限する必要があります。

したがって、これを修正するために必要なことは、バッファキャッシュのサイズを制限することです。経験則は、(Total_RAM 2GBまたは10%(どちらか大きい方) 最大バッファキャッシュです。このキャッシュのサイズを制限しない場合、OSとSQLが競合し始めると、サーバーはメモリプレッシャーに達する可能性がありますこの設定は、Management StudioのSQLサーバープロパティのメモリセクションにあります。

enter image description here

これに関する詳細については、---(Brent OzarのパートIIのSQL Server展開チェックリスト)のメモリのベストプラクティスを参照してください。

これが最近起こったので、誰かが別のソフトウェアをインストールまたは実行することによって、SQLサーバーとのメモリ競合を引き起こすために何かをしたと私は推測しています。

最後に、SQLサーバーが実際にバッファープールに使用しているメモリの量を確認する場合は、SQL Server Memory Manager: Total Server Memory perfmonカウンター。これは、バッファープールが使用しているメモリの量です(サーバーの合計メモリではありません)。タスクマンはこの記憶を見せません。

10
Kyle Brandt

タスクマネージャーに表示されない理由は、メモリ内のページをロックして割り当てるAWEを使用しているためです。メモリはページングできないため、最大サーバーメモリを設定することが重要になります。 http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

5
Mark Sowul

リークではありません。これはSQLが動作するはずです。すべてのRAMが可能です。SQLは、特にこのため、ボックス上で唯一のアプリである必要があります。このため、本当に制限する必要がある場合は、できると思いますそれでも、SQLが制限を設定するよりも多くのRAM=を必要とする場合は、天国が役立ちます。

1
mfinni

この動作が過去数週間で変更された理由はわかりませんが、SQL Serverは設計どおりに動作しているようです。通常、サーバーの最大メモリ制限まで、可能な限り多くのメモリを保持し、他のプロセスが本当にを必要とする場合にのみ放棄します。 。 あなたがSQLを放棄すべきだと考える点RAMと[〜#〜] sql [〜#〜]は、それを放棄する必要があると考えていますRAMは明らかに同期していません。これは問題なく、通常の動作ではありません、そのため、これをクリアするためのコントロールが用意されています。OSとバックグラウンドアプリに一部のRAM=を許可するように最大サーバーメモリパラメーターを設定すれば、問題ありません。

これは、理解を助けるための洞察に満ちた投稿です- http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/08/24/troubleshooting-the-sql-server-memory-leak-or-understanding-sql -server-memory-usage.aspx

さらに、このページの3番をチェックして、x64 SQL Serverのメモリ使用量をチェックするときにタスクマネージャーが不適切なツールである理由を確認してください- http://blogs.msdn.com/b/psssql/archive/2009/ 09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

1
pk.

はい、それはおそらくSQLであり、SQL接続からの使用パターンに何かが変更された可能性があります。 SQLは、RAMでSQLデータのキャッシュを開始するだけなので、そのデータが要求されたときに、おそらく最近より多くの要求があると思います。SQLパフォーマンスが低い場合を除いて、SQLは本来のことをしていると思います。

1
Bret Fisher