【Oracle】SQLの実行時間の調査方法
社内メールにて「SQLの実行時間の調査」について書かれていたメールが展開されていて気になった。マスタメンテナンスなどでマスタテーブルの更新や削除などをしているけど、「SQLの実行時間」については全く気にも止めていなかった。
過去いろいろな案件に携わってきたけど、「SQLの実行時間」について『確認してね?』というような依頼もなかった。だけど、面談等で案外言われるのが、「SQLのチューニングとかの経験ありますか?」という台詞。こっちから「SQLのチューニングはしたことないです」と前もって言うこともある。
この、SQLのチューニングってのがどの程度ありふれたことなのかわからないけど、実務で依頼されるとか個人的にやるとかきっかけはなんであれ知っておくに越したことはないと思う。
SQLの性能調査、というと堅苦しい?けど、SQLの実行時間についてはどうやったら確認ができるのか。まずはググッて調べてみた。※おそらくOracle限定の内容になりそう。
①set timing onを使う
まずはSQL*PLUSでDBと接続する。そして、
set timing on
select count(*) form TBL_A;
と実行してみる
すると、以下の様なメッセージが出力される。
経過:00:00:00:005
これが第一の方法。set timing on を指定することで、「出力」までの実行時間が表示される。ただし、標準出力までの実行時間なので、表示情報が大量にあるSQL結果の場合、実行時間は長くなってしまう。
②autotraceを使う
set autotrace traceonly
set timing on
select count(*) from TBL_A;
と実行してみる。
すると、①のように標準出力にSQLの実行結果が表示されず、経過時間のみ(他にも色々出るけど)表示される。
経過:00:00:00:001
ちなみに、set autotrace traceonlyを指定して、エラーが出る場合がある。
SP2-0618:セッション識別子が見つかりません。PLUSTRACEロールが有効かを確認して下さい
これは、デフォルトではPLUSTRACEロール(権限)が作成されていないため、PLUSTRACEロールの作成スクリプト(plustrace.sql)を流してロールを有効にする必要がある。
■手順
①管理者で接続
connect / as sysdba
②以下のコマンドでplustrace.sqlを実行する
?/sqlplus/admin/plustrace.sql
実行すると、「ロールが削除されました」「ロールが作成されました」「権限付与が成功しました」と、いうログが流れる。
③通常使用するユーザにPLUSTRACEの権限を付与する。
以下の例ではHOGEユーザにPLUSTRACEの権限を付与している。
GRANT PLUSTRACE TO HOGE;
④これでplustraceが使えるようになる。
ちなみに上記のPLUSTRACEロールの権限付与については、
SP2-0618: セッション識別子が見つかりません。PLUSTRACEロールが有効かを確認してください。 - 大人になったら肺呼吸
を参考にさせていただきました。
実行時間の調査については(Oracleでの手順だけど)はわかった。あとは、実際に時間がかかりすぎている場合とかにどうやって対応するかというのがまだなにもわかっていない。展開されていたメールでは、「INDEX」とか「ヒント句」といった用語が飛び交っていた。
INDEXとヒント句に限らず、SQLとか全般含めてわからないことが多すぎるので機会があればまとめておく必要があると思う・・・。
絵で見てわかるOracleの仕組み (DB Magazine SELECTION)
- 作者: 小田圭二
- 出版社/メーカー: 翔泳社
- 発売日: 2006/06/21
- メディア: 単行本
- 購入: 27人 クリック: 385回
- この商品を含むブログ (48件) を見る
新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)
- 作者: 小田圭二,大塚信男,五十嵐建平,谷敦雄,宮崎博之,神田達成,村方仁
- 出版社/メーカー: 翔泳社
- 発売日: 2012/08/17
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 5回
- この商品を含むブログ (1件) を見る