適切なアドバイスを得るには適切な情報が必要
もう1つの頼もしい存在が、データベースエンジンチューニングアドバイザだ。これは、取得したSQLプロファイラトレースの結果を基に、チューニングを行うためのデータベースの物理設計構造の追加や削除、変更などのアドバイスをしてくれる機能だ。得られたアドバイスは、すぐにシステム適用可能だ。これらのツールや機能を活用することで、いまでは「誰でもチューニングが行える環境が整備された」という。
誰でもチューニングが行えるとはいえ、それで技術者がいらないわけではない。たとえば、ある1時間ぶんのSQLプロファイラトレースを取得し、それを基にシステムからアドバイスを得たとしても、それはトレースを取得した間の処理に対応するチューニングだ。データベースのシステムには夜間バッチもあれば週次、月次処理もあるだろう。取得した1時間のトレースだけでは、そういった処理までは考慮されない。ならばすべてのトレースを取ればいいとも考えられるが、SQL Server 2008 R2では項目数を増やしトレースを取得すると10%程度はCPUリソースを消費してしまう。
システムの運用状況まで考慮し、適切にトレースを取得して利用するのは、チューニング作業の中で人が関与すべき重要なことだ。システムから適切なアドバイスを受けたければ、最良の情報をシステムに与えなければならない。ここについては、すべてをシステムに任せられないのだ。ちなみに、次期バージョンとなるDenaliでは、XE Profilerというライトウェイトのツールが提供されるとのこと。これを活用すれば負荷を上げずに情報収集が可能となり、自由度は向上することになる。
データベースエンジニアはOSやハードウェアまで意識すべきか
ところで、SQL Serverは必ずWindowsの上で動く。そのため、WindowsとSQL Serverは密接に結びついているのかといえば、そんなことはない。
「Oracleやその他のオープンソースデータベースなどと同様、OSからは完全に独立して動いています。Windowsの上ではさまざまなアプリケーションが動くので、OSのスケジューラーは1つ1つのアプリケーションの状態までは考慮しません」(平山氏)
そうだとすると、データベースをよりよい状態に保つには、エンジニアがWindowsの状態を意識しなければならないのだろうか。平山氏によれば、WindowsとSQL Serverの間にはSQL OSというものがあり、両者のやり取りを抽象化してくれる。これがあることでデータベースエンジニアは、通常はOSやハードウェアの状況を特に意識する必要はないとのこと。
しかし、CPU負荷が極めて高いなどの場合に、高度なチューニングを施す必要がある際にはOSやハードウェアを意識する必要も出てくる。SQL Serverの内部構造を理解し、OSやハードウェアも含めた高度なチューニング技法を身につけるための参考書として、『絵で見てわかるSQL Serverの内部構造』(平山 理著 翔泳社)がある。この中では、SQL OSについても詳細な解説がなされている。
通常のチューニングにおいては、OSやハードウェアを特に意識する必要はない。とはいえ、最新のハードウェアなりを活用すれば、大きなパフォーマンスの向上が見込めるのも事実だ。OracleがディスクIOを高速化するために採用している、SSDをディスクとしてではなく広大なメモリ空間として利用する方法についても、SQL Serverでも取り組みが始まっている。
またSQL Server Parallel Data Warehouseのように、既存の環境を載せ替えるだけで高速化できる、あらかじめハードとソフトを組み合わせた環境も提供されている。これからは、基本的なチューニング技法に加え、最新のハードウェア動向についても技術者はしっかりと押さえておいたほうが良いだろう。
もう1つ、ハードウェアが進化したが故に発生するトラブルもある。最新のサーバーでは、CPUは32コア、64コアなどが当たり前になりつつある。
「コアがたくさんあれば、効率化するために並列度を上げ並列処理をさせます。とはいえ、無闇に起動するスレッド数を増やしてしまうと、メモリを使い切ってしまいかえって遅くなることがあります」(平山氏)
リソースが潤沢になって簡単になる部分と、逆に多すぎて混乱する部分があると平山氏は指摘する。現状のSQL Serverでは論理的に256コアまで対応しているが、今後のさらなるコア数の増加が予測され、2048コアまで対応するとの噂も聞こえてくる。「そうなれば、まったく次元の違う話が出てくる」と平山氏。大きなシステムになればなるほど、いままでは発生しなかった新たな特別な問題が出てくる可能性があることを認識しておくべきだと言う。