SQLの実行を「見える化」する

2010年10月4日(月)
藤井 等

問題のSQLを修正してみる

DB Optimizerで問題のあるSQLをチューニングするのは、SQLチューナーです。SQLチューナーでは、ヒントインジェクションやインデックス分析、統計分析などを使って、データ取得に使われる実行パスを変更します。

SQLチューナーでは、実際にSQLを実行して複数の候補の中から最も効果のあるチューニング結果を選択できるので、環境やデータによっても異なるパフォーマンスの最適解を見つけ出すことができます。

また、新規にSQL文を入力してチューニング作業を開始できるほか、SQLプロファイラで検出した問題となるSQL文をインポートしてチューニングできます。

チューニングジョブを実行すると、「ケース」と呼ばれる修正候補のSQL文がリストされます。これらのSQLは、同じ結果を導く異なるパスを用いたものです。画面にはこれらの候補の詳細が表示され、その場で実行してみることもできます。

その結果、その場で最も効果的な「ケース」を、実際のデータを参照しながら選択することができます。

図3:実際の実行結果を参照しながら修正候補を選択できるSQLのチューニング(クリックで拡大)

SQLパフォーマンスの見える化による3つの効果

SQLパフォーマンス問題を「見える化」することによって、直接的に3つの効果を期待できます。

パフォーマンス問題の早期発見
開発段階から顕在化していないSQLパフォーマンスを、ビジュアルツールを使って発見することができます。結果的に、SQLのコード品質を高め、テスト段階、運用段階でのトラブルを軽減でき、結果的に大幅なコスト削減に結びつきます。
問題の解決に最適な選択が可能
選択した解決策が最適だったかどうか、比較をしてみないと分かりません。しかし、多くの場合両方を試すのは困難です。SQLチューナーを使うと、実際に実行した結果を簡単に比較できるので、容易に最適解を選ぶことができます。
チームメンバーのスキルの底上げが可能
ベテランエンジニアに頼らずとも、SQLのチューニングが可能です。パフォーマンスチューニングの指南書を読破しなくても、どこに問題があるのか、ピンポイントで理解できるので、ツールの助けを借りながら実地で経験を積んでいくことができます。

まとめ

SQLパフォーマンス問題の「見える化」は、パフォーマンス問題の検出を、膨大なログと格闘するような文字情報を頼りに問題箇所をなんとか探し出すといった、これまでの原始的な手法から、直感的なグラフィカル情報によってすぐに問題を認識できる洗練された方法へと変革します。

また、問題の解決方法も、従来の経験やカンを頼りにしたやり方から、ツールの力を借りて正確に分析、検証できるようになり、確実性と効率性が格段に上がります。ある実例では、これまでの手法で16時間かかっていたSQLパフォーマンスチューニングが、ツールの導入によって2時間に削減できたといいます。

「見える化」の意義は、治療に例えると分かりやすいでしょう。

健康診断では、からだ全体をそれぞれ検査していきます。そこでは、レントゲンや超音波を使って、実際に問題がないかを目で確認していきます。もし、これらの診断が問診だけだったとすれば、受診者も不安でしょう。

問題が見つかったときには、より細かい検査を行います。これによって具体的な治療方針を決め、実施していきます。もちろん治療を行った後には再び検査を行い、完治したことを確認します。

SQLのパフォーマンス問題の解決に、これまでこのような手法が採られてこなかったことが不思議でなりません。問題の発見、分析、解決にグラフィカルツールを用いることで、レントゲンなどと同じように、問題の「見える化」が可能になるのです。

さて、次回は、データベースの設計に起因するパフォーマンス問題を「見える化」する方法について説明します。

エンバカデロ・テクノロジーズ 日本法人代表
千葉大学文学部行動科学科卒業。石油関連会社でGISなどの開発を経験したのち、1995年、ボーランドに入社。マーケティングとしてJava開発ツールJBuilderやVisiBrokerなどミドルウエア製品の立ち上げを行う。2008年7月、ボーランドの開発ツール部門を合併したエンバカデロ・テクノロジーズに移籍。2009年1月より日本法人代表を務める。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています