はじめてのsqlチューニング(oracle)

22
SQL チチチチチチ チチチ 2013/10/07

Upload: kounan13

Post on 10-Jun-2015

1.224 views

Category:

Documents


0 download

DESCRIPTION

SQLチューニングってとっかかりがよくわからない。とか、 AWR、実行計画、統計情報。なにそれ?おいしいの?という方にお勧め。

TRANSCRIPT

SQL チューニング勉強会

2013/10/07

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

切り分けに使うツール・ログtop,glance,vmstatjps/jstatkill -3/ 侍NeckLessサーバログ (catalina.out)alert/trace ログsyslog

よくある性能問題の原因GC 頻発スレッド間のオブジェクト waitDB のデッドロックJavaScript の長時間化SQL の長時間化

性能問題の 8 割は SQL 実行計画の理解は必須

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 結合にて駆動表の件数が多い

インデックス (B tree)

http://www.hi-ho.ne.jp/tsumiki/doc_1.html

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

統計情報さえ変わらなければ実行計画はぶれないか?

No Bind Peek Cardinality Feedback Adaptive Cursor Sharing Dynamic Sampling

チューニングヒント句や構文変更によりおプティマイザ

に適切な実行計画をださせること

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

チューニングの手段インデックスを DB に貼るSQL の構文を変更する

結合順序 絞り込み条件

ヒント句を付与する

パーティション

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 使用率が閾値超え

性能問題実例OS やミドルのパラメータにも気を配る必

要があります

単性能は OK だったが、負荷性能試験で NG ファイルディスクリプタを使い果たしエラー

性能問題実例2012 年 x 月 y 日 とあるシステムがカット

オーバーした デッドロックが多発。ホスト DB2 のロックエスカ

レーションが原因だとか AP サーバは WebOTX

SQL が長時間化していないのにも関わらずレスポンスが悪い処理がある

⇒synchronized 処理におけるスレッドのオブジェクト待ちと SQL のロック待ちのデッドロック