SQL Serverは一般的にチューニング不要のデータベースと認識されている。しかし基幹系業務システムへの導入が進むにつれて、パフォーマンス・チューニングのニーズは急速に高まってきた。そこで本記事では、日本におけるSQL Serverコンサルタントの第一人者、熊澤幸生氏にSQL Serverチューニングのノウハウを語っていただくことにした。インタビュアーはSQL Serverへの造詣が深いITジャーナリスト、工藤淳氏が担当する。(編集局)
前回「SQL Serverというブラックボックスを開いてみる」では、メモリ管理がなぜパフォーマンス・チューニングを考えるうえで重要なのかをお話ししました。今回からはいよいよ具体的な例を紹介しながら、実践で使えるノウハウを見ていきましょう。メモリ管理には、知らないと何が起こっているのか、その原因や本質が見えない事象がいくつもあります。できるエンジニアはこのチューニングの「ツボ」を押さえて効率よく、的確にメモリ管理を行っています。
あるとき、私の担当しているお客さまから「クライアントのタイムアウトを検知して、クラスタがフェイルオーバーして頻繁に切り替わってしまう」と連絡が入りました。そこで調べてみると、SQL Server 2000自体は使用可能メモリいっぱいの4Gbytesのメモリを認識しているにもかかわらず、実際には1.6Gbytesしか利用できていません。その瞬間私は「ああ、また例の設定値だな」とピンときました。さて、いったい何のことだと思いますか。
図1、図2を見てください。これはパフォーマンス診断ツールを使って、このマシンのメモリ使用状況を可視化したものです。このシステムは「Xeon MP 8Ways」のマシンで8Gbytesのメモリを積んでいます。しかしOSのWindows Server 2003はそのうち2.69Gbytesしか利用していません。実は32bitアプリケーションであるSQL Server 2000は通常、最大4Gbytesのアドレス空間のうち2Gbytesないし3Gbytesのメモリしか使用できません(OS用に2Gbytesないし1Gbytes確保される)。この事例のように、4Gbytesを超えるメモリを搭載しても、初期設定のまま放っておいたのでは全部を有効に活用できないのです。このお客さまも、まさにそのことをご存じなかったのでした。
SQL Serverでは「sp_configure」システム ストアド プロシージャの環境設定オプションである「show advanced options」を「1」に設定すると、設定可能な拡張オプションがすべて表示されます(リスト1)。
sp_configure 'show advanced options', 1 GO RECONFIGURE GO
この操作で表示されるようになった「awe enabled」を確認します(図3)。上のお客さまのケースでは、ここの設定値が「0」になっていました。このため物理メモリは十分なのに、その何分の1しか使えず、その結果メモリ不足によるタイムアウトが頻発していたのです。お客さまは「SQL Server 2000 Enterprise Editionは、4Gbytes以上のメモリ空間を使えるはず」というところまでは知っていたのですが、AWE注1の設定を知らなかったために、原因が分からないまま困惑するのみでした。
Copyright © ITmedia, Inc. All Rights Reserved.