[SQL Server 2000] 大容量メモリを使うには?

SQL Server 2000 SP4以降の累積パッチ
を適応しようとして、とんでもないことに気が付きました(;´Д`) 現在、あるシステムはWindows Server 2003 Enterprise Edition(32bit)
上で動作しており、メモリも8GB搭載してます。

しかーし!!

その大容量のメモリを使うための設定を何もしていなかったのですヽ(;´Д`)ノ バカァ~

つまり。

現状だと8GBのメモリが載っていても、2GBしか使われていないということになります。まったくもって一大事であります (;´∀`)・・・うわぁ・・・


何故気が付いたか?と言うと、累積パッチには以下のパッチも含まれていたからです。

そう、「AWE」というキーワードです。これを見たときに、「あっ!・・・」となったのは言うまでも無い Ω\ζ°)チーン ところで、このAWEとはなんじゃい?という話なんですが。以下のKBにまとめられています。

つまり、Windowsでは「/PAE」オプションをBoot.iniに付与することで、AWE(Address Windowing Extensions)というAPIで4GB以上のメモリ空間を利用できるようになるというわけです。ちなみにPAEってのは、x86アーキテクチャのプロセッサにおける、4Gbytes以上の物理メモリを利用可能にする技術だそうで、物理メモリのアドレッシングに使用できるビット数を 32 ビットから 36 ビットに拡張してくれます。ココココ
書いてました。

では、実際に設定をしなくてはいけません(早くしろっ)
設定しなくてはいけないのは、

  • Windows Server 2003でPAEオプションの設定
  • SQL Server 2000でPAEを使用するように設定

の2項目です。

[Windows Server 2003でPAEオプションを設定する]
————————————————–
Windows Server 2003で4GB以上のメモリを使用できるように設定するには、Boot.iniにオプションを追加する必要があります。

以下はデフォルトのBoot.iniっす。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS=”Windows Server 2003, Enterprise” /fastdetect /NoExecute=OptOut

一番下の行に「/PAE」を追加します。

multi(0)disk(0)rdisk(0)partition(1)WINDOWS=”Windows Server 2003, Enterprise” /fastdetect /PAE /NoExecute=OptOut

追加して保存したら、OSを再起動よろしく。

※ ちなみにこのオプションは、Windows Server 2003だとEnterprise EditionもしくはDatacenter Editionでないと使えません。

Windows Server 2003でBoot.iniを編集する方法は、以下にまとめられています。

ところが・・・My Computerのプロパティで確認してみたら・・・しっかりメモリは8GBで認識されており、「物理アドレス拡張」なんてのも表示されてました。

何で?と思ったら、上記でも書いたこのKBをよくみると以下のようなことが書かれていた。

Windows Server 2003 Enterprise Edition および Windows Server 2003 Datacenter Edition ではホットアド メモリ デバイスを利用している場合にのみ、PAE が自動的に有効に設定されます。そのため、ホットアド メモリ デバイスを使用するように構成されているシステムでは、/PAE スイッチを使用する必要はありません。これ以外の場合、4 GB を超えるメモリを活用するには、Boot.ini ファイルで /PAE スイッチを使用する必要があります。

というわけで、既にOSは8GBのメモリを認識してたようです。。。

[SQL Server 2000でAWEを有効にする]
————————————————–
SQL Server 2000上でAWEが有効になっているかどうか?を調べるには、以下のクエリを発行してください。

sp_configure ‘show advanced options’, 1
go
reconfigure
go
sp_configure ‘awe enabled’
go

「run_value」が「0」の場合は、無効です。
続いて、AWEを有効にするには以下のクエリを発行します。

sp_configure ‘show advanced options’, 1
RECONFIGURE
go
sp_configure ‘awe enabled’, 1
RECONFIGURE
go

続いて「max server memory」オプションの値を設定します。この値を設定しないとSQL Serverのインスタンス以外に128MB未満のメモリしか割り当てられないようになってしまいます(実際には試してないです)。詳細についてはBOLの「awe enabled オプション」のところに記載されています。
以下のクエリは、6GBのメモリを割り当てる場合です(実際にそうだった)。

sp_configure ‘max server memory’, 6144
RECONFIGURE
go

以上の設定を行ったら、SQL Server 2000のインスタンスを再起動します。

[再起動後]
————————————————–
タスクマネージャを起動すると・・・確かにメモリは6GB確保されているように見える。しかし、「sqlservr.exe」のプロセスは96MBほどしか使ってないではないですか!?
なんでだ?と思ってBOLを見てみたら・・・

タスク マネージャでは、AWE について正確なメモリ使用状況は提供されません。したがって、sqlservr.exe に対して見積もられたメモリ量は正しくありません。SQL Server の正確なメモリ使用量を取得するには、システム モニタを通じてアクティブ化される Total Server Memory (KB) パフォーマンス カウンタを使用するか、または sysperfinfo からメモリ使用量を選択できます。

だそうです。確かにパフォーマンスモニタで、
パフォーマンス オブジェクト:「SQLServer:Memory Manager」
カウンタ:「Total Server Memory (KB)」
を確認したところ、6GB割り当てられてました。

ほんと、びっくりさせるなよな。。

あ、そうそう。
AWEオプションを使う場合は、先のパッチは当てましょうヽ(´ー`)ノ

今更ですが、「何で64bitにしなかったんだよ・・・」と言いたい (´ヘ`;)

[SQL Server 2000] 大容量メモリを使うには?

[SQL Server 2000] 大容量メモリを使うには?” への6件のフィードバック

  1. SQLServerのPAEモードについて調べていたところ、こちらに辿り着きました。たいへんよくまとめられていて、すごく参考になりました。有益な情報ありがとうございます。

  2. hirakawa のコメント:

    すごく参考になりました。
    全く同じ現象で悩んでましたので、とてもハッピーです。

  3. >hirakawa
    今では、この手の仕事から離れてしまい、最近ではこういうネタで雑記を書くことも無くなってしまったのですが、
    いまだにお役に立ててるかと思うと嬉しいですね。

  4. ツキ のコメント:

    パッチの件が全く知っていなくて
     8G積んでいるのに4Gしか使っていなく、なぜなのか悩んでいました、解決しました、ありがとうございます。

  5. >ツキ
    良かったです (´ー`)

    世の中ではSQL Sever 2008とか言ってるようですね。。。

コメントを残す