はじめてのsqlチューニング(oracle)
DESCRIPTION
SQLチューニングってとっかかりがよくわからない。とか、 AWR、実行計画、統計情報。なにそれ?おいしいの?という方にお勧め。TRANSCRIPT
GOAL10/7 AM3:00- 実行された夜間バッチの
SQL が長時間化している。どうやら性能試験の時に想定していた実行
計画がぶれている 全パーティションで NestedLoops 結合で
Table Access Full が走っている統計情報が古かったことが原因だとか。。。ヒント句等でインデックスが効くようにし
てほしい
GOAL( つづき ) ディレード処理が返ってこない オンライン処理で遅い処理がある 夜間バッチが終わらない
と PM から言われた時どうしますか? 以下を使って切り分けしましょう
「Webアプリの問題点を「見える化」する7つ道具」 AWR (実行計画)
原因切り分けが終わったらチューニングしましょう ミドルウェア・ OS パラメータチューニング SQL チューニング
Webアプリの問題点を「見える化」する 7つ道具
http://www.atmarkit.co.jp/ait/articles/0703/22/news138.html
HelloWorld 実行計画 SQL> set autotrace on SQL> select * from TBL2 where col1 = 10000;
COL1 COL2 ---------- -------------------------------------------------------------------------------- 10000
10000AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
実行計画 ---------------------------------------------------------- Plan hash value: 1207070705
-------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 65 | 3 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| TBL2 | 1 | 65 | 3 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | PK_TBL2_COL1 | 1 | | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------------------
Predicate Information (identified by operation id): ---------------------------------------------------
2 - access("COL1"=10000)
http://www.oracle.com/technetwork/jp/database/articles/shibacho/dba05-1598286-ja.html
よくある SQL が遅い原因実行計画が悪い
アクセス方法が非効率 Table Full Scan Index Skip Scan
件数絞り込みがいまいち Merge Join Cartesian( 直積 ) Nested Loops 結合にて駆動表の件数が多い
INDEX UNIQUE SCAN
http://www.hi-ho.ne.jp/tsumiki/doc_1.html
件数絞り込みがいまいちNested Loops の例
http://www.magata.net/memo/index.php?%C9%BD%B7%EB%B9%E7%A4%CE%B4%F0%C1%C3%C3%CE%BC%B1
実行計画が作られる仕組み
http://www.oracle.com/technetwork/jp/ondemand/db-new/b-14-consulsql-1448421-ja.pdf
チューニングヒント句や構文変更によりおプティマイザ
に適切な実行計画をださせること
http://www.atmarkit.co.jp/ait/articles/0408/25/news101_3.html
DB の問題点を「見える化」AWR
http://www.oracle-base.com/articles/10g/automatic-workload-repository-10g.php
パーティション
http://www.atmarkit.co.jp/ait/articles/0611/22/news141.html
GOAL に達しましたか?10/7 AM3:00- 実行された夜間バッチの
SQL が長時間化している。どうやら性能試験の時に想定していた実行
計画がぶれている 全パーティションで NestedLoops 結合で
Table Access Full が走っている統計情報が古かったことが原因だとか。。。ヒント句等でインデックスが効くようにし
てほしい。
性能試験は大変データを積む
顧客テーブルに A 顧客がいて、 X 契約と Y 契約を持っていて、 X 契約の満期日は~月~日で、、、なんていう業務知識って方式チームにはないですよね。
1000 万件の壁マシンを占有する
移行チーム・業務チーム・基盤チームとの取り合いです
マシン都合で進捗が遅れたなんて言い訳できません
性能問題実例当該 SQL が遅いだけならまだしも、他の
SQL の実行に迷惑をかけるケースがあります
一時表領域を使い果たし、他の SQL 遅延 ラッチ競合を起こし、 Service Guard のヘル
スチェック SQL 遅延により、 Oracle のフェールオーバー
ディレード処理が長時間化( 2 時間超)し、 CPU 使用率が閾値超え