パフォーマンスを向上させるSQLの記述法:Oracle SQLチューニング講座(6)(2/3 ページ)
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)
再解析が行われる場合
共有プールにキャッシュされた情報は、SQLが完全に同一の場合にのみ再利用されます。WHERE句に指定されている条件値が異なっていたり、SQLの意味が同一でもスペースの個数、改行位置、大文字、小文字など、少しでも異なっていれば違うSQLとして新たに解析されてしまいます。表2にSQLが共有されない例を示します。
表2のSQLはすべて違うSQLとして解析されます。どのような場合にHARD PARSEが発生するのかを理解し、HARD PARSEの発生を少なくすることを意識してください。
なお、キャッシュされたSQLがアクセスする表、索引の定義変更や、再作成を行うと、キャッシュされたSQLは無効となり、次回の実行時にはハードパースが発生します。そのためこれらの処理を行う場合には、なるべくデータベースのアクティビティが低い時間帯に行うようにしてください。
同義なSQL実行結果
同じ結果を返す以下のSQL(1)、(2)を同一セッションで交互に2回実行します。セッション単位の統計情報を取得することができる、動的パフォーマンス・ビュー「V$SESSTAT」を参照し、解析処理がどのように実行されているかを確認します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
解析処理の確認
SELECT文の実行結果は同じですが、(4)、(5)で確認できるようにSQL(1)、(2)の1回目の実行後に「parse count(hard)」の回数が増加しています。これはそれぞれのSQLでHARD
PARSEが実行されていることを表しています。上記の場合、SQLの改行位置が異なるため、それぞれ別のSQLであるとOracleは判断し、両方のSQLに対しHARD
PARSEを行っています。それに対して(6)、(7)では、すでに解析結果がキャッシュされているため、「parse count (total)」の回数のみが増加しています。これはHARD
PARSEが実行されていることを表しており、解析結果を再利用していることになります。
アプリケーションを開発する際には、大文字、小文字、改行位置、TABやスペースの個数など、SQLの記述ルールを細かく定めておくべきです。例えば、SQLの構文(SELECT/DELETE/INSERT/FROM/WHEREなど)は大文字、列名、表名などのオブジェクト名は小文字、TABは1つなど、具体的に決めておくことが重要です。
Copyright © ITmedia, Inc. All Rights Reserved.