Oracle DB ベストプラクティス
SQLの識別子 – SQL_ID, HASH_VALUE, OLD_HASH_VALUE
SQLの問題調査においては、”SELECT * FROM … ” といったSQLコマンド文字列だけではなく、SQLの識別子を抑えることが重要です。
SQLコマンド文字列だけでは、調査を効率的に進めることが難しい場合があるためです。SQLコマンド文字列は単なる文字列であるため、似たSQLコマンドを混同したり、大量のSQLが記録されたトレースファイルなどの診断情報から、目的のSQLを探しだすことに時間を要する恐れがあります。
しかし、Oracle Databaseはバージョンによって使用できるSQLの識別子が違ったり、識別子の算出ロジックが異なりますので、注意が必要です。
01.SQL識別子の確認方法
SQLの識別子を確認する一般的な方法は以下の5つです。
- V$SQLビュー – 共有プールにキャッシュされた共有カーソルに対応するSQLの識別子を確認
- V$SESSIONビュー – 実行中SQLと直前に実行していたSQLの識別子を確認
- SQLトレース – トレース有効時に実行したSQLの識別子を確認
- Statspackレポート – 高負荷SQLとしてリストされたSQLの識別子を確認
- AWRレポート – 高負荷SQLとしてリストされたSQLの識別子を確認
02.Oracle DatabaseのバージョンとSQL識別子
Oracle Database 9.2以前では、SQLハッシュ値(V$SQLのHASH_VALUE列に対応)をSQLの識別子として原則的に使用していました。
しかし、ハッシュの精度に問題があったため、Oracle Database 10.1よりSQL ID(V$SQLのSQL_ID列に対応)が導入されました。
このような経緯があるため、バージョンによって使用できるSQL識別子が異なります。
それに加えて、情報ソースによって、どのSQL識別子を出力するかが異なります。
情報ソースと表示されるSQL識別子の対応を以下に示します。
情報ソース |
10.1- |
-9.2 |
V$SQL |
SQL_ID, HASH_VALUE, OLD_HASH_VALUE |
HASH_VALUE(=SQL_HASH_VALUE) |
V$SESSION |
SQL_ID, SQL_HASH_VALUE |
SQL_HASH_VALUE |
SQLトレース |
SQL_HASH_VALUE, SQL_ID(11.1-) |
SQL_HASH_VALUE |
Statspackレポート |
OLD_HASH_VALUE |
SQL_HASH_VALUE |
AWRレポート |
SQL_ID |
N/A |
OLD_HASH_VALUEについては次で説明します。
03.10.1以降のOLD_HASH_VALUEとHASH_VALUE
Oracle Database 10.1 よりSQL_IDが導入されましたが、9.2以前で使用されていたSQLハッシュ値が使用される場合もあります。あるシステムをアップグレードした場合など、同一のSQLについてOracle Database9.2以前とOracle Datbase 10.1以降を比較する機会はあります。このため、Oracle Database 10.1以後でもSQLハッシュ値は残されています。
しかし、理由は不明ですが、V$SQLのHASH_VALUEで確認できるハッシュ値の算出アルゴリズムに変更が加えられました。このため、同一のSQLを9.2以前と10.1以降で実行した場合、HASH_VALUEが違った値になってしまいます。これでは、SQLの同一性の確認に使用できない為、9.2以前の算出アルゴリズムを使用した列として、OLD_HASH_VALUEが導入されています。
上記の表のとおり、10.1以降のStatspackレポートでは、SQLの識別子としてOLD_HASH_VALUEを出力しています。これは9.2以前のStatspackレポートと突合せできるようにするためです。
04.V$SQLよりSQLの識別子を確認する例
調査対象のSQLを実行した後、以下のようなSQLを実行することで、SQLの識別子を確認できます。
なお、共有カーソルから共有カーソルがage-outされた場合は、SQLの識別子を確認できないことに注意してください。
SQL> select sql_text, sql_id, hash_value, old_hash_value from v$sql where sql_text = 'select * from dual';
SQL_TEXT
--------------------------------------------------------------------------------
SQL_ID HASH_VALUE OLD_HASH_VALUE
------------- ---------- --------------
select * from dual
a5ks9fhw2v9s1 942515969 1333943659
この記事の監修者
舛井 智行 (ますい ともゆき)
営業本部 企画&マーケティング部 次長
《資格》
Oracle Master Gold、Oracle RAC Expert、Linux Expert、LPIC Level1、Dbvisit Standby Certified Associate、基本情報技術者
《略歴》
2004年コーソル入社。2019年まで一貫してOracle Databaseの設計・構築・運用のサービス提供に従事。リモートDBAやリモート監視のサービス化、働き方改革プロジェクトで人事制度改革を手掛ける。2019年からライセンス販売強化のため企画&マーケティング部に異動。DbvisitやToad、DPAの取扱開始、販売促進活動を推し進め、ライセンス販売事業の売上拡大に注力中。
《主な著書》
オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL
Oracleの基本 ~データベース入門から設計/運用の初歩まで
プロとしてのOracle入門
Oracle Database 10g Oracle Enterprise Manager 逆引きクイックリファレンス
《担当者様からの一言》
コーソルはOracle Databaseの技術力において日本有数の知見を有すると自負しています。Oracle Masterの最高峰資格である『Oracle Master Platinum』の取得者数も日本No.1です。Oracle Databaseのことはもちろん、それ以外のDBについてもリモートDBAサービスを始めとした様々なサービス、製品を駆使してお客様のお困りごとを解消いたします。お困りごとがあればコーソルまでご相談ください。
峯岸 隆一 (みねぎし りゅういち)
インフラソリューション部 市ヶ谷クラウドサービスチーム シニアエキスパート
《資格》
Oracle Master Gold、ORACLE MASTER Platinum、Oracle RAC Expert、
Oracle Database Cloud Service Oracle Infrastructure as a Service Cloud 2017 Implementation Essentials、
Oracle Cloud Infrastructure 2018 Architect Associate、
Oracle Cloud Infrastructure 2019 Architect Professional、
AWS Certified Solutions Architect – Associate、OSS-DB Silver、
MySQL 5.6 Database Administrator、基本情報技術者、テクニカルエンジニア(データベース)
《略歴》
2006年コーソル入社。2021年までOracle Databaseを中心にMySQLやGoldenGateなど、多岐にわたる製品のサポート業務に従事。2021年から企画&マーケティング部に異動し、Nutanix NDBサービス化、Qlik Replicateサービス化、AWS、OCIなど様々な製品のサービス化、クラウド環境上の製品検証、ブログ執筆を手掛ける。2023年からOCI技術に磨きをかけるべくOCI基盤の設計・構築業務を遂行中 。
《主な著書》
オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL Oracleの基本 ~データベース入門から設計/運用の初歩まで
《担当者様からの一言》
コーソルはOracle Database製品および周辺製品において特化した技術力を有している会社です。また、育成にも力を入れており、新卒などOracle Databaseの知識がないエンジニアでも数年でOracle Master Platinumを取得するほどのエンジニアに育て上げることに成功しています。クラウド分野(AWS、Oracle Cloud)にも積極的に進出しておりますので、Oracle Databaseに関するサービスをご要望であればプラットフォーム問わず対応できるコーソルにご連絡下さい。