none
SQLServer2000のメモリ使用量について RRS feed

  • 質問

  • 皆様こんにちは

     

    Windows Server 2003R2 Stranded Edition

    SQL Server 2000 Stranded Edition SP3の環境で

    物理メモリを4GB搭載しています。

     

    DB専用マシンなので、Enterprise Managerで

    boot.ini に /3GBスイッチを加え、

    「固定メモリサイズを使用」、「SQLServerの物理メモリの予約」で

    1.5~2.GB以上の値をいろいろ変更しても

    タスクマネージャで確認すると

    「sqlservr.exe」のメモリ使用量はだいたい1,331,320K前後です。

    これは仕様と考えてよいのでしょうか。

    それとも、メモリをSQLServrerにより割り当てるためには、他にも設定が必要でしょうか?

    よろしくお願いします

    kudoken

     

     

     

     

    2010年9月8日 4:03

回答

  • SQL Server は必要なければメモリを確保しません。パフォーマンス モニタで SQL Server のメモリ使用量の推移を見てみると、サービス インスタンスを起動した直後は少なく確保して、時間がたつにつれて増えていくのが見えるでしょう。プラトーに達したらそれ以上は使う必要がないということです。

    参考:

    SQL Server 2000 チューニング全工程(1) Page 2
    http://www.atmarkit.co.jp/fdb/rensai/sqlstune01/sqlstune01_2.html

    あ、あと 32 ビット版みたいなんで、AWE を有効にしないと 2GB までしかメモリを確保できません。


    Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう
    • 回答としてマーク kudoken 2010年9月10日 2:54
    2010年9月8日 5:03
  • タスクマネージャから確認できるメモリ使用量は、バッファ領域のみなので、非バッファ領域 (EXE,DLL,Providerなど) は含まれていないはずです。

    そのため、32ビットで ユーザーアドレス空間 2GB が使用できるのですが、非バッファ領域分のアドレスもユーザーアドレスに割り当てられているので、タスクマネージャから確認できるメモリ使用量が max server memory に達していないといっても、特に支障はないと思います。

    ただ、/3gb を有効にしている場合、ユーザーアドレス空間が 3GB になり、AWE を有効にしなくとも、3GBのアドレス空間を使用できたと思っているのですが、何故 SQL Server が使用できていないかは不明ですね。  M_Lewis-san が言われているとおり、この環境では、1.3GB以上のメモリを確保する必要がないのかもしれません。

    また、AWEは、SQL Server 2000 では、Enterprise Edition でしか有効に出来なかったような気がします。(確実な情報でなくてすみません。)

    • 回答としてマーク kudoken 2010年9月10日 2:53
    2010年9月9日 13:41
  • NOBTAさんの説明にあるように、AWEは使えないですね。
    Enterprise Editionのみ使用可能で合ってます。(Developer Editionも使えますが、実運用という意味ではEnterprise Editionだけですね)
    Standard EditionではAWEは使えません。

    で、/3GBのオプションを利用している場合、SQLServerが最大3GBのメモリを利用可能になるというのもそうですね。
    /3GBを使っていない場合は、最大2GBが使用可能です。
    (ユーザモードで利用できるメモリの最大量ですね)

    タスクマネージャでは正確なメモリ量はわかりませんので、(タスクマネージャには現時点で確保されている量(≠使用量)しか出ません)
    サーバが使用できる動的なメモリの合計サイズについて、
    パフォーマンスモニタで「SQLServer:Memory ManagerのTarget Server Memory(KB)」の値を取得するのがより正確です。
    で、コミットされている容量は「SQLServer:Memory ManagerのTotal Server Memory(KB)」の値で取得できます。

    例えば、min server memoryに3GB以上の値を指定すると、Target Server Memory(KB)の値にはそれに近い値が出るんじゃないかと思います。
    そこが3GBに足りていないなら、他のサービスがメモリを握ってるのかもしれません。
    (min server memoryを3GBに設定してもTarget・・・が2GBに近い値しか出ないようなら、/3GBの設定が出来ていないことも考えられます)

    そして、Total Server Memory(KB)の値が1.3GBやもっと少ない数字だったら、M_Lewisさんの言うとおりそれだけしか必要としていないんだろうと思います。
    (おそらく、タスクマネージャの値よりもTotal Server Memory(KB)の値のほうが小さいです)

    • 回答としてマーク kudoken 2010年9月10日 2:54
    2010年9月9日 16:21

すべての返信

  • SQL Server は必要なければメモリを確保しません。パフォーマンス モニタで SQL Server のメモリ使用量の推移を見てみると、サービス インスタンスを起動した直後は少なく確保して、時間がたつにつれて増えていくのが見えるでしょう。プラトーに達したらそれ以上は使う必要がないということです。

    参考:

    SQL Server 2000 チューニング全工程(1) Page 2
    http://www.atmarkit.co.jp/fdb/rensai/sqlstune01/sqlstune01_2.html

    あ、あと 32 ビット版みたいなんで、AWE を有効にしないと 2GB までしかメモリを確保できません。


    Please mark the thread as Answered when an answer resolves your problem. 回答が得られたら、もらった回答の [回答済み] ボタンをクリックしてスレッドを回答済みにしましょう
    • 回答としてマーク kudoken 2010年9月10日 2:54
    2010年9月8日 5:03
  • タスクマネージャから確認できるメモリ使用量は、バッファ領域のみなので、非バッファ領域 (EXE,DLL,Providerなど) は含まれていないはずです。

    そのため、32ビットで ユーザーアドレス空間 2GB が使用できるのですが、非バッファ領域分のアドレスもユーザーアドレスに割り当てられているので、タスクマネージャから確認できるメモリ使用量が max server memory に達していないといっても、特に支障はないと思います。

    ただ、/3gb を有効にしている場合、ユーザーアドレス空間が 3GB になり、AWE を有効にしなくとも、3GBのアドレス空間を使用できたと思っているのですが、何故 SQL Server が使用できていないかは不明ですね。  M_Lewis-san が言われているとおり、この環境では、1.3GB以上のメモリを確保する必要がないのかもしれません。

    また、AWEは、SQL Server 2000 では、Enterprise Edition でしか有効に出来なかったような気がします。(確実な情報でなくてすみません。)

    • 回答としてマーク kudoken 2010年9月10日 2:53
    2010年9月9日 13:41
  • NOBTAさんの説明にあるように、AWEは使えないですね。
    Enterprise Editionのみ使用可能で合ってます。(Developer Editionも使えますが、実運用という意味ではEnterprise Editionだけですね)
    Standard EditionではAWEは使えません。

    で、/3GBのオプションを利用している場合、SQLServerが最大3GBのメモリを利用可能になるというのもそうですね。
    /3GBを使っていない場合は、最大2GBが使用可能です。
    (ユーザモードで利用できるメモリの最大量ですね)

    タスクマネージャでは正確なメモリ量はわかりませんので、(タスクマネージャには現時点で確保されている量(≠使用量)しか出ません)
    サーバが使用できる動的なメモリの合計サイズについて、
    パフォーマンスモニタで「SQLServer:Memory ManagerのTarget Server Memory(KB)」の値を取得するのがより正確です。
    で、コミットされている容量は「SQLServer:Memory ManagerのTotal Server Memory(KB)」の値で取得できます。

    例えば、min server memoryに3GB以上の値を指定すると、Target Server Memory(KB)の値にはそれに近い値が出るんじゃないかと思います。
    そこが3GBに足りていないなら、他のサービスがメモリを握ってるのかもしれません。
    (min server memoryを3GBに設定してもTarget・・・が2GBに近い値しか出ないようなら、/3GBの設定が出来ていないことも考えられます)

    そして、Total Server Memory(KB)の値が1.3GBやもっと少ない数字だったら、M_Lewisさんの言うとおりそれだけしか必要としていないんだろうと思います。
    (おそらく、タスクマネージャの値よりもTotal Server Memory(KB)の値のほうが小さいです)

    • 回答としてマーク kudoken 2010年9月10日 2:54
    2010年9月9日 16:21
  • 皆様

    ご回答ありがとうございます。

    教えていただいた情報で、より確認します。

    ありがとうございました。

    2010年9月10日 2:55