連載
» 2006年03月03日 00時00分 UPDATE

Dr. K's SQL Serverチューニング研修(2):誰も知らないメモリ・チューニングの極意を教えよう (1/3)

[熊澤幸生, 工藤淳(インタビュアー),エイ・エヌ・テイ/オフィスローグ]

SQL Serverは一般的にチューニング不要のデータベースと認識されている。しかし基幹系業務システムへの導入が進むにつれて、パフォーマンス・チューニングのニーズは急速に高まってきた。そこで本記事では、日本におけるSQL Serverコンサルタントの第一人者、熊澤幸生氏にSQL Serverチューニングのノウハウを語っていただくことにした。インタビュアーはSQL Serverへの造詣が深いITジャーナリスト、工藤淳氏が担当する。(編集局)

 前回「SQL Serverというブラックボックスを開いてみる」では、メモリ管理がなぜパフォーマンス・チューニングを考えるうえで重要なのかをお話ししました。今回からはいよいよ具体的な例を紹介しながら、実践で使えるノウハウを見ていきましょう。メモリ管理には、知らないと何が起こっているのか、その原因や本質が見えない事象がいくつもあります。できるエンジニアはこのチューニングの「ツボ」を押さえて効率よく、的確にメモリ管理を行っています。

メモリ・チューニングの基本は、正しく
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を超えるメモリを搭載しても、初期設定のまま放っておいたのでは全部を有効に活用できないのです。このお客さまも、まさにそのことをご存じなかったのでした。

図1 SQL Server 2000の初期状態(クリックすると拡大します) 前回紹介したパフォーマンス診断ツール「Quest Spotlight on SQL Server」の画面。中央の「SQL Memory」を見ると、SQL Serverは利用可能なメモリ3.92Gbytesのうち1.61Gbytesしか利用していないのが分かる。 図1 SQL Server 2000の初期状態(クリックすると拡大します)
前回紹介したパフォーマンス診断ツール「Quest Spotlight on SQL Server」の画面。中央の「SQL Memory」を見ると、SQL Serverは利用可能なメモリ3.92Gbytesのうち1.61Gbytesしか利用していないのが分かる。
図2 Windows Server 2003の初期状態(クリックすると拡大します) 図1のSQL Server 2000が稼働しているWindows Server 2003の状態(「Quest Spotlight on Windows」の画面)。「Memory」を見ると、Windows Server 2003は利用可能な8Gbytesのメモリのうち2.68Gbytesしか利用していなかった。 図2 Windows Server 2003の初期状態(クリックすると拡大します)
図1のSQL Server 2000が稼働しているWindows Server 2003の状態(「Quest Spotlight on Windows」の画面)。「Memory」を見ると、Windows Server 2003は利用可能な8Gbytesのメモリのうち2.68Gbytesしか利用していなかった。

 SQL Serverでは「sp_configure」システム ストアド プロシージャの環境設定オプションである「show advanced options」を「1」に設定すると、設定可能な拡張オプションがすべて表示されます(リスト1)。

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
リスト1 「sp_configure」で拡張オプションを表示させる設定変更

 この操作で表示されるようになった「awe enabled」を確認します(図3)。上のお客さまのケースでは、ここの設定値が「0」になっていました。このため物理メモリは十分なのに、その何分の1しか使えず、その結果メモリ不足によるタイムアウトが頻発していたのです。お客さまは「SQL Server 2000 Enterprise Editionは、4Gbytes以上のメモリ空間を使えるはず」というところまでは知っていたのですが、AWE注1の設定を知らなかったために、原因が分からないまま困惑するのみでした。

注1:AWE
AWE(Address Windowing Extensions)とは、巨大な物理メモリの一部をユーザーメモリ空間中(ハードウェア領域)のウィンドウにマッピングさせて直接利用するためのAPIを指しています。ちなみにこのSQL ServerのAWEは、もともとXeonプロセッサが持っていたAWE機能をWin32のAPI用に使ったものです。

図3 「sp_configure」の設定値(クリックすると拡大します) 「sp_configure」の「show advanced options」を有効にし、表示されたすべてのパラメータから一部を抽出したもの。「awe enabled」の「config_value」が「0」、つまり無効であるため、SQL Serverが利用可能なメモリのうち一部しか使えない。 図3 「sp_configure」の設定値(クリックすると拡大します)
「sp_configure」の「show advanced options」を有効にし、表示されたすべてのパラメータから一部を抽出したもの。「awe enabled」の「config_value」が「0」、つまり無効であるため、SQL Serverが利用可能なメモリのうち一部しか使えない。
       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。