2011年4月23日土曜日

SQLServer リソースプールinternalのメモリ不足です

■原因について
「max server memory」を指定していない場合、
物理メモリをすべて食い尽くし、SQLServer自体で
利用するメモリが不足するためと考えられる。
SQLServerの仕様のようだが、本番で発生すると痛い。

■対処法
   「max server memory」を設定して下さい。
物理メモリより当然少なくし、OSが利用する分、
SQLServerが利用する分を差し引いた残りを設定する。
トラブル時で時間がないときは、とりあえずサーバ再起動が早道

■詳細
「max server memory」の既定値は2,147,483,647Mbytes
となっている。既定値のままだとどんどんメモリを食う。
消費したメモリは、どこに使われたかというと
「バッファキャッシュ」という所に割り当てられている。
これは、あらかじめディスクから読み込んだデータを
メモリ上に展開しておき、次回から高速に応答できるようにしている。

SQLServerのバッファキャッシュが解放される条件は、
内部的に空き容量(Free Pages)の状態かつ
1)コンピュータを再起動した場合
2)他のアプリケーションからのメモリ要求が発生した場合
だそうだ。

「DBCC DROPCLEANBUFFERS」というコマンドがあるが
これは、物理的にメモリを解放せず、メモリ使用量は減らない。

0 件のコメント:

コメントを投稿