1分あたり50〜100クエリを実行する実行中のサービスがあります。そして、これらは高コストのクエリではありません。このサービスは、エラーなしで約3〜4か月実行されています。
突然数日前に"リソースプール 'default'にこのクエリを実行するのに十分なシステムメモリがありません。"エラーが時々発生し始めました。問題を調査すると、sqlservr.exe
は、〜1.5 GBのRAMと%25のCPU(すべて1/4CPU)を使用していました。そして、sqlservr.exe
ラムは〜50mbから始まり、〜1.5gbになるまでゆっくりと増加し、それを使用するアプリでクラッシュします。
少し調べてみたところ、使用しているSQLサーバーのエディションが原因であることがわかりました。数をそれらに限定する特急版でした。したがって、SQLサーバーを'2008r2 express'から'2012 enterprise'にアップグレードしました。サービスを開始したとき、私は問題がついに終わったと思いました、サービスは〜60mbのメモリしか使用しないので、残念ながら同じ問題が発生し始めました制限を超えない。
WcfサービスでORMとしてEntityFramework
を使用します。それに加えて、いくつかのキャッシュ操作用のSqlQueryNotification
(ブローカーなど)システムがあります。
いくつかの重要な設定ポイントがありませんか?または、6GBのメモリと4つのCPUは本当にこれには十分ではありませんか?しかし、同じ負荷が3か月間同じであり、その時点でエラーがなかったため、コードの変更もなかったため、それは不可能です。
SQL Serverは、必要なだけのメモリで起動し、サーバープロパティで割り当てられたすべてを使用するまでゆっくりとランプアップします。
サービスが再起動されるまで、このメモリは解放されません。これは仕様です。
通常、OSには2 GBを残すことをお勧めします。SQLと同じサーバーで実行されている他の処理に注意する必要があります。通常は、SQL Serverを独自のサーバーで実行し、他で何も実行しないことをお勧めします。
つまり、SQL Serverの場合は1.5 GBのRAMはそれほど多くありません。使用可能な容量がまだない場合は、サーバーを追加するか、サーバーをアップグレードするときが来るかもしれません。
参照: Technet 、 Brent Ozar