none
SQLServerのプール領域について RRS feed

  • 質問

  • あるVBプログラムがとても大量のSQLを発行していて、一回の検索でメモリが400MB程使用されます。別の条件で検索を行っていくとさらにメモリ使用量が増え続けてしまいます。おそらくSQLServerのプール領域で使用されていると思われますが、この領域には上限値はあるのでしょうか?(このプール領域がメモリをすべて使用してしまうことはあるのでしょうか?それとも例えば、このプール領域は全体のメモリ量に対して一定割合が上限である、など何かしらの上限はあるのでしょうか?)

    どうぞよろしくお願い致します。

     

    2010年3月12日 5:13

回答

  • 非バッファ領域には、EXE、DLL などの実行可能ファイル、スレッドスタック、拡張ストアドプロシージャ、他プロセスとの共有メモリに使われている領域だったと思います。

    非バッファ領域の正確な計算方法はないと思います。  既定では、最低限  max worker threads * 512 KB + 256MB のメモリは非バッファ領域として確保されるみたいです。

    1.36GB 以上バッファ領域が増えないのであれば、それ以外のメモリ領域は、非バッファ領域 及び SQL Server 以外のプロセス(OS含む) にて使用されているのだと思います。

    • 回答としてマーク KO admin 2010年4月5日 9:39
    2010年4月1日 11:14

すべての返信

  • SQL Server は、動的メモリ管理を実施し、SQL Server のパフォーマンスが最大になるよう、メモリを使用できるだけ使用し、必要に応じて SQL Server にて確保されたメモリを解放するという動作を行っています。 今回のメモリ確保の動作は、想定された正常な動作ですね。
    上限は、MAX Server Memory に設定している値になりますが、規定では 事実上 無制限 となっています。
    2010年3月12日 8:16
  • ご回答どうもありがとうございます。

    バージョンをお伝えするのを忘れてしまいました。申し訳ございません。
    SQL Server 2005 SP2 になります。


    検索を続けていくとメモリ使用量は増えていくのですが、WindowsタスクマネージャのPF使用量が「1.36GB」を境に増えなくなります。
    なお、物理メモリは2.5GB、max server memory は 2,147,483,647MB になります。

    Q1: この環境下では、上限が「1.36GB」のように思われます。このプール領域はコンピュータ全体のメモリ量に対して一定割合が上限である、など何かしらの上限はあるのでしょうか?

     

    2010年3月16日 3:06
  • 32ビットマシンの場合、ユーザープロセス空間(2GB) の制限がございます。
    非バッファ領域も既定では、368 MB ぐらいだったと思いますので、非バッファ領域を引いた領域が、バッファ領域として利用できたと思います。
    2010年3月16日 4:05
  • ご回答どうもありがとうございます。

    Q1: 非バッファ領域についてご教授いただけますでしょうか。

    Q2: どのような計算をによって、1.36GBになりますでしょうか?

     

    2010年3月17日 2:16
  • 非バッファ領域には、EXE、DLL などの実行可能ファイル、スレッドスタック、拡張ストアドプロシージャ、他プロセスとの共有メモリに使われている領域だったと思います。

    非バッファ領域の正確な計算方法はないと思います。  既定では、最低限  max worker threads * 512 KB + 256MB のメモリは非バッファ領域として確保されるみたいです。

    1.36GB 以上バッファ領域が増えないのであれば、それ以外のメモリ領域は、非バッファ領域 及び SQL Server 以外のプロセス(OS含む) にて使用されているのだと思います。

    • 回答としてマーク KO admin 2010年4月5日 9:39
    2010年4月1日 11:14
  • 理解できました。
    どうもありがとうございました。
    2010年4月5日 9:41