検索
連載

パフォーマンスを向上させるSQLの記述法Oracle SQLチューニング講座(6)(2/3 ページ)

本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

再解析が行われる場合

 共有プールにキャッシュされた情報は、SQLが完全に同一の場合にのみ再利用されます。WHERE句に指定されている条件値が異なっていたり、SQLの意味が同一でもスペースの個数、改行位置、大文字、小文字など、少しでも異なっていれば違うSQLとして新たに解析されてしまいます。表2にSQLが共有されない例を示します。

 表2のSQLはすべて違うSQLとして解析されます。どのような場合にHARD PARSEが発生するのかを理解し、HARD PARSEの発生を少なくすることを意識してください。

 なお、キャッシュされたSQLがアクセスする表、索引の定義変更や、再作成を行うと、キャッシュされたSQLは無効となり、次回の実行時にはハードパースが発生します。そのためこれらの処理を行う場合には、なるべくデータベースのアクティビティが低い時間帯に行うようにしてください。

表2 SQLが共有されない例
表2 SQLが共有されない例

同義なSQL実行結果

 同じ結果を返す以下のSQL(1)、(2)を同一セッションで交互に2回実行します。セッション単位の統計情報を取得することができる、動的パフォーマンス・ビュー「V$SESSTAT」を参照し、解析処理がどのように実行されているかを確認します。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

解析処理の確認

図1 同じ結果を返すSQLの解析処理を比較
図1 同じ結果を返すSQLの解析処理を比較
*SQLが実行されているセッションIDを便宜上「SID=8」としています

 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.

ページトップに戻る