Oracle Direct Seminar <Insert Picture Here> オラクルコンサルが 語 るSQLチューニングの 真 髄 解 決 編 Part1,2 日 本 オラクル 株 式 会 社 1
アジェンダ Introduction 目 的 とゴール SQLパフォーマンス 問 題 の 理 由 と 原 因 SQLパフォーマンス 問 題 の 定 義 SQLパフォーマンス 問 題 へのアプローチ SQLパフォーマンス 問 題 の 解 決 へのアプローチ 定 型 的 なSQLチューニング SQLコーディングルール 非 定 型 的 なSQLチューニング コストベース オプティマイザへのインプット 実 行 計 画 の 妥 当 性 まとめ Appendix データアクセス 方 法 表 結 合 方 法 順 序 2
<Insert Picture Here> Introduction 3
本 セミナーの 目 的 とゴール 目 的 とゴール SQLパフォーマンス 問 題 が 発 生 する 理 由 を 理 解 する SQLパフォーマンス 問 題 とは 何 かを 理 解 する SQLパフォーマンス 問 題 へのアプローチを 理 解 する SQLパフォーマンス 問 題 の 対 処 方 法 を 理 解 する 定 型 的 なSQLチューニングを 理 解 する 非 定 型 的 なSQLチューニングを 理 解 する 4
<Insert Picture Here> SQLパフォーマンス 問 題 の 理 由 と 原 因 5
SQLパフォーマンス 問 題 の 定 義 SQLパフォーマンス 問 題 = SQLのパフォーマンス 要 件 を 満 たせない 状 況 要 件 とは? レスポンス 要 件 ある 処 理 に 対 してどの 程 度 の 時 間 内 で 結 果 が 返 る 必 要 があるか スループット 要 件 単 位 時 間 毎 にどれだけの 処 理 を 並 行 して 行 う 必 要 があるか 要 件 が 満 たせない 要 因 は? 無 駄 な 処 理 本 来 想 定 していない 処 理 ( 不 要 なソート 処 理 不 要 な 関 数 の 実 行 不 要 な 表 結 合 etc)のこと 無 駄 な 待 機 処 理 をしたいのに 処 理 できずに 不 要 な 時 間 を 要 してしまう 状 態 いわゆるロック 待 ちとして 他 の 処 理 が 終 了 するまで 待 機 せざるを 得 ない 場 合 6
無 駄 な 処 理 無 駄 な 待 機 SQLレスポンス 時 間 は 次 の 式 で 表 すことができる SQLレスポンス 時 間 = CPU 時 間 + 待 機 時 間 = 必 要 なCPU 時 間 + 無 駄 なCPU 時 間 + 必 要 な 待 機 時 間 + 無 駄 な 待 機 時 間 無 駄 な 待 機 時 間 = 待 機 回 数 1 待 機 あたりの 平 均 待 機 時 間 7
なぜSQLでパフォーマンス 問 題 は 起 きるのか? 手 続 き 型 言 語 Java C Perl 問 い 合 わせ 言 語 SQL 処 理 の 方 法 を 記 述 処 理 の 内 容 を 記 述 同 一 の 処 理 内 容 に 対 して 複 数 の 記 述 方 法 が 可 能 処 理 ロジックを 意 識 しないコーディングが 可 能 データ 取 得 方 法 などの 処 理 は データベースに 任 されている 正 しい 結 果 が 返 ることには 気 にするだけでなく 処 理 の 効 率 化 やデータベース 内 での 処 理 を 意 識 する 必 要 がある 8
SQLパフォーマンス 問 題 へのアプローチ チューニング アプローチ SQL 文 の 記 述 方 法 が 柔 軟 でも パフォーマン ス 問 題 を 発 生 させないようにするためには 記 述 方 法 にある 程 度 守 るべきルールが 存 在 する SQLコーディングルールによるSQL 文 の 確 認 定 型 的 なチューニング 非 定 型 的 なチューニング 定 型 的 な 解 があるわけではない 頭 で 考 える 必 要 のあるSQLチューニング SQLがどのように 処 理 しているのかを 意 識 しながら 実 行 計 画 の 確 認 アーキテクチャを 意 識 したチューニング 定 型 的 なチューニング 非 定 型 的 なチュー ニングを 実 施 しても 改 善 しない 場 合 は Oracleアーキテクチャやアプリケーション アーキテクチャを 意 識 して 考 察 する 必 要 が ある SQL 文 の 実 行 状 況 処 理 状 況 をアーキテ クチャも 含 めて 確 認 9
<Insert Picture Here> SQLパフォーマンス 問 題 の 解 決 へのアプローチ 定 型 的 なSQLチューニング 10
定 型 的 なSQLチューニング 定 型 的 なSQLチューニング = 最 低 限 のSQLコーディング ルール 最 低 限 これだけは 守 って コーディングする 問 題 がおきたら 最 低 限 これだけはチェックする 予 防 チューニング 柔 軟 な 言 語 だからこそ 守 るべきルールが 存 在 する 大 きく4つのカテゴリに 分 かれる 1. アーキテクチャに 伴 う 性 能 問 題 を 避 けるためのルール 2. 使 用 方 法 やノウハウを 元 に 性 能 問 題 を 避 けるためのルール 3. 可 読 性 や 管 理 性 を 高 めるためのルール 4. 運 用 ポリシーを 考 慮 したルール 11
SQLコーディング ルール 1.アーキテクチャに 伴 う 性 能 問 題 を 避 けるためのルール バインド 変 数 の 使 用 指 針 理 由 WHERE 句 に 条 件 を 指 定 する 場 合 は バインド 変 数 を 使 用 する 一 般 にOLTP 系 ではバインド 変 数 を 使 用 しない 場 合 本 来 必 要 でない 再 解 析 が 多 発 し CPU 負 注 意 点 荷 の 上 昇 共 有 プール 内 の 他 SQL 用 の 解 析 結 果 を 追 い 出 すことによるDB 全 体 のスループット 低 下 を 招 く 可 能 性 が 高 くなるためです アプリケーションでSQLを 生 成 するような 場 合 には 特 に 注 意 してください SQLの 内 部 に 値 を 直 接 付 け 加 えるのではなく (JDBCであれば) setint, setstgring 等 を 使 用 し 必 ずバインド 変 数 を 使 用 してください なお このルールは 一 般 にOLTP 向 けのガイドとなります DWH 系 のシステムではバインド 変 数 を 使 用 せずに 値 データの 異 なるSQLを 共 有 させずに SQLごとに 最 適 な 実 行 計 画 で 処 理 を 行 っ た 方 が 性 能 がよい 場 合 もあります 12
SQLコーディング ルール 2. 使 用 方 法 やノウハウを 元 に 性 能 問 題 を 回 避 するためのルール の 例 ビューに 対 する 結 合 の 回 避 指 針 理 由 ビューとビューの 結 合 やビューと 表 の 結 合 は 避 ける このような 結 合 によりデータを 取 得 したい 場 合 はビュー 定 義 を 参 照 し ビューの 元 表 を 使 用 してSQL 文 を 記 述 する ビューを 結 合 に 用 いると データを 取 得 するために 必 要 な 本 来 の 表 以 外 にも 余 計 な 表 にアクセ スする 可 能 性 があります このような 状 況 が 生 じた 場 合 直 積 結 合 の 発 生 等 で 必 要 以 上 のデ ータアクセスが 発 生 し 性 能 問 題 が 発 生 する 可 能 性 があります 13
SQLコーディング ルール 3. 可 読 性 や 管 理 性 を 高 めるためのルール 管 理 用 コメントの 付 与 指 針 理 由 SQLに 管 理 用 コメント 追 加 する 管 理 コメントの 命 名 規 則 を 定 義 し それに 従 ってコメントを 記 載 す る どのモジュールからどのような 目 的 で 発 行 されたものであるかがわかるような 命 名 規 則 にして おく 必 要 がある 管 理 用 コメントを 記 載 しておくことで チューニングやデバックの 際 に 原 因 SQLを 発 行 しているプロ グラムの 特 定 が 容 易 になります また SQLの 発 行 状 況 などのトレンド 把 握 も 容 易 になります 注 意 点 管 理 用 コメントをあまりにも 細 かく 分 類 すると 解 析 情 報 を 共 有 すべき 同 一 のSQL が 同 一 でなく なってしまう 懸 念 があります プログラムやSQLを 特 定 するのに 必 要 十 分 な 区 分 で 管 理 用 コメント の 付 加 します 汎 用 的 なSQLがコメントによって 同 一 のSQL でなくなってしまっては 本 末 転 倒 です 汎 用 SQLに 対 するコメントも 命 名 規 則 も 定 義 しておく 必 要 があります 14
SQLコーディング ルール 4 運 用 ポリシーをコーディングに 反 映 させるルールの 例 ヒント 句 の 使 用 を 検 討 する 指 針 理 由 SQL 内 にヒント 句 の 使 用 を 検 討 する アプリケーションロジックからSQLを 外 部 ファイルに 記 載 しておいたものを 呼 び 出 す 運 用 を 行 って いるので SQLチューニングの 判 断 によりヒント 句 を 使 用 して 改 善 を 行 うことを 検 討 します SQLのパフォーマンス 管 理 は 業 務 チームが 最 終 的 に 判 断 して 行 ってください しかし 業 務 チー ムの 判 断 のみで ヒント 句 を 追 加 することは 禁 止 します 15
<Insert Picture Here> SQLパフォーマンス 問 題 の 解 決 へのアプローチ 非 定 型 的 なSQLチューニング - コストベース オプティマイザのインプット - 16
非 定 型 的 なSQLチューニング ポイント SQL 文 の 実 行 処 理 は 実 行 計 画 で 定 義 されるため CBOが 決 定 す る 実 行 計 画 の 良 し 悪 しがSQL 文 のパフォーマンスに 影 響 します SQL 文 を 適 切 な 実 行 計 画 で 実 行 させることが 非 定 型 的 なSQLチ ューニングのポイント 次 の2 点 を 理 解 することが 重 要 CBOが 何 をベースに 実 行 計 画 を 決 定 するか 実 行 計 画 の 妥 当 性 をどのように 判 断 するか 17
非 定 型 的 なSQLチューニング チューニングの 進 め 方 オプティマイザへの インプット 情 報 は 妥 当 か? YES オプティマイザが 生 成 した 実 行 計 画 は 適 切 か? インプット 情 報 を 修 正 できるか? NO NO YES NO STEP1 まずはCBOがどのような 情 報 を 基 に 実 行 計 画 を 決 定 するかを 理 解 します YES NO 自 身 で 実 行 計 画 を 検 討 STEP2 次 にCBOが 決 定 した 実 行 計 画 が 妥 当 であるかどうかを 判 断 するための 指 針 を 理 解 します パフォーマンスを 確 認 し 妥 当 であればチューニング 完 了 18
コストベース オプティマイザ コストベース オプティマイザ(CBO)はどのような 情 報 をもとに 実 行 計 画 を 決 定 するか SQLテキスト オブジェクト 構 造 CBO(コストベース オプティマイザ) パラメータ 実 行 計 画 レスポンス データの 実 態 統 計 情 報 環 境 19
オプティマイザへのインプット 情 報 SQLテキスト SQL 文 そのもの コーディング ルールを 遵 守 しているか 確 認 ルールに 従 っていない 箇 所 を 修 正 20
オプティマイザへのインプット 情 報 オブジェクト 構 造 アクセスするオブジェクトの 情 報 ディクショナリ 表 から 対 象 SQLに 関 連 するオブジェクト 情 報 ( 表 索 引 列 定 義 を 使 用 するビューのテキスト)を 収 集 し WHERE 句 条 件 に 適 した 索 引 が 作 成 されているかを 確 認 索 引 が 不 足 している 場 合 は 索 引 構 成 を 変 更 注 意 同 じ 表 を 使 用 する 他 のSQLに 影 響 するので 慎 重 に! 21
オプティマイザへのインプット 情 報 初 期 化 パラメータ オプティマイザがコストを 判 断 する 際 の 基 礎 情 報 オプティマイザに 影 響 を 与 えるパラメータについて V$SYS_OPTIMIZER_ENVビューより 環 境 に 適 した 値 に 設 定 されてい るか 確 認 必 要 に 応 じてパラメータ 値 を 変 更 注 意 インスタンス レベルで 設 定 値 を 変 更 する 場 合 には 全 てのSQL 文 に 影 響 を 与 えるため 十 分 な 注 意 が 必 要 です セッション レベルで 設 定 値 を 変 更 可 能 なパラメータもあるため 状 況 に 応 じて 使 い 分 けましょう 22
オプティマイザへのインプット 情 報 統 計 情 報 オブジェクトやデータの 状 態 を 表 す コストベース オプティマイザのコスト 計 算 に 直 接 的 に 影 響 するので デフォル ト 値 を 使 用 せず 実 データを 基 に 値 を 収 集 すること 必 要 な 統 計 情 報 が 欠 落 していないか 取 得 した 統 計 情 報 と 実 データ の 傾 向 が 乖 離 していないかどうかを 確 認 統 計 情 報 を 再 収 集 または 固 定 化 注 意 実 行 計 画 に 大 きな 影 響 を 与 えるため 再 収 集 によりSQLパフォーマンスが 悪 化 する 可 能 性 もあります 必 ず 実 行 計 画 や 性 能 の 確 認 を 行 いましょう 23
<Insert Picture Here> SQLパフォーマンス 問 題 の 解 決 へのアプローチ 非 定 型 的 なSQLチューニング - 実 行 計 画 の 妥 当 性 - 24
実 行 計 画 の 読 み 方 SQL> SELECT d.dname, e.empno, e.ename, e.job FROM emp e, dept d WHERE e.deptno = d.deptno; 順 序 Execution Plan ---- ---------------------------------------------------------- 4 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=14 Bytes=392) 3 1 HASH JOIN (Cost=5 Card=14 Bytes=392) 1 2 TABLE ACCESS (FULL) OF 'DEPT' (Cost=2 Card=4 Bytes=44) 2 3 TABLE ACCESS (FULL) OF 'EMP' (Cost=2 Card=14 Bytes=238) インデントで 整 形 されたツリー 構 造 となっている ツリー 構 造 の 深 いオペレーションから 実 行 される 同 一 のレベルであれば 上 に 表 示 されているものから 結 合 方 法 の 次 のレベルに 結 合 対 象 の 表 が 表 示 される( 結 合 操 作 ありの 場 合 ) 25
データアクセス 方 法 データアクセス 方 法 の 種 類 データアクセス 方 法 は 大 きく2つあります 表 を 直 接 参 照 全 表 スキャン (TABLE ACCESS FULL) データ アクセス 方 法 索 引 を 利 用 して 参 照 索 引 のレンジスキャン (INDEX RANCE SCAN) 索 引 の 一 意 スキャン (INDEX UNIQUE SCAN) 索 引 のフルスキャン (INDEX FULL SCAN) 索 引 の 高 速 フルスキャン (INDEX FAST FULL SCAN) 索 引 のスキップスキャン (INDEX SKIP SCAN) 26
データアクセス 方 法 表 を 直 接 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 全 表 スキャン(TABLE ACCESS FULL) HWM(High Water Mark)までの 全 ブロックを 読 み 込 みます 索 引 のスキップスキャン 表 がパーティション 化 されている 場 合 一 部 のツールではTABLE ACCESS FULLとなっていても 表 全 体 にアクセスするとは 限 らず 特 定 のパーティションの みにアクセスしている 可 能 性 があります DBバッファキャッシュ AP サーバー プロセス PGA HWM ポイント1:キャッシュに 残 されない 場 合 が 多 い ポイント2: 複 数 ブロック 読 み 込 みでのI/O 回 数 ポイント3: 必 ずHWMまで の 読 みが 発 生 27
データアクセス 方 法 索 引 を 利 用 して 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 索 引 のレンジスキャン 索 引 のスキップスキャン root INDEX RANGE SCAN B1 B2 L11 L12 L13 L21 L22 キー 値 の 範 囲 でリーフ ブロックをスキャンして 条 件 に 該 当 する 複 数 エントリを 返 します 28
データアクセス 方 法 索 引 を 利 用 して 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 索 引 の 一 意 スキャン 索 引 のスキップスキャン root INDEX UNIQUE SCAN B1 B2 L11 L12 L13 L21 L22 条 件 に 該 当 する1エントリを 返 します UNIQUE 索 引 の 列 に 対 して 等 価 条 件 を 使 用 している 場 合 のみ 出 力 されるオペ レーションです 29
データアクセス 方 法 索 引 を 利 用 して 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 索 引 のフルスキャン 索 引 のスキップスキャン root B1 B2 L11 L12 L13 L21 L22 INDEX FULL SCAN リーフブロックをフルスキャンして 条 件 に 該 当 するエントリを 返 します リンク 順 にスキャンするため キー 値 でソートされた 順 にエントリを 返 します 返 された 値 がソートされているため その 後 のソート 処 理 を 省 略 できる 場 合 があ ります 30
データアクセス 方 法 索 引 を 利 用 して 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 索 引 の 高 速 フルスキャン 索 引 のスキップスキャン セグメント ヘッダ root L11 B1 L21 INDEX FAST FULL SCAN L22 B2 ツリー 構 造 を 意 識 せずに セグメント ヘッダから 順 にブロックをフルスキャンする ため 返 ってくる 値 はソートされていません マルチ ブロック リードやパラレル 実 行 を 行 うことができます 31
データアクセス 方 法 索 引 を 利 用 して 参 照 データ アクセス 方 法 表 を 直 接 参 照 索 引 を 利 用 して 参 照 全 表 スキャン 索 引 のレンジスキャン 索 引 の 一 意 スキャン 索 引 のフルスキャン 索 引 の 高 速 フルスキャン 索 引 のスキップスキャン 索 引 のスキップスキャン root B1 B2 L11 L12 L13 L21 L22 INDEX SKIP SCAN 複 合 索 引 の 第 1 列 目 に 対 する 条 件 指 定 がなく 2 列 目 以 降 の 列 に 対 して 条 件 指 定 があった 場 合 に 採 用 され 得 る 可 能 性 があります INDEX RANGE SCANと 比 較 すると 効 率 が 悪 いオペレーションです 32
セレクティビティとカーディナリティ セレクティビティとは SQLの 条 件 ( 条 件 の 組 み 合 わせ)にヒットする 行 ソースの 割 合 セレクティビティ( 選 択 率 ) = 条 件 を 適 用 した 結 果 の 行 数 / 全 体 の 行 数 計 算 方 法 は ヒストグラム( )の 有 無 により 異 なります 算 出 方 法 の 例 (ヒストグラムが 存 在 しない 場 合 ) 条 件 句 等 価 条 件 COL = X 非 等 価 条 件 COL > X 算 出 方 法 1 / NDV Number of Distinct Value ( 列 に 含 まれる 値 の 種 類 ) データが 一 様 に 分 布 していると 仮 定 するので 等 価 条 件 のセレクティビテ ィは1/NDVとして 計 算 されます (HIVAL-X+1)/(HIVAL-LOWVAL+1) 33
セレクティビティとカーディナリティ セレクティビティの 計 算 例 例 ) SELECT * FROM customer WHERE 性 別 = 男 性 性 別 列 は 男 性 女 性 の2 種 類 =NDVは2 SQLのセレクティビティは1/2として 計 算 されます 実 際 のデータでは 男 性 の 比 率 が10%だったとしても 50%の 割 合 で 条 件 にヒットすると 予 測 を 立 てて 実 行 計 画 を 算 出 します 顧 客 ID 顧 客 名 地 域 性 別 000001 田 中 隆 二 関 東 男 性 000002 井 上 みき 東 北 女 性 000003 工 藤 朊 子 関 東 女 性 000004 本 井 美 由 紀 九 州 女 性 000005 日 高 千 尋 関 東 女 性 000006 齋 藤 美 佳 関 東 女 性 000007 若 木 泉 水 関 東 女 性 000008 佐 々 木 千 枝 東 北 女 性 000009 立 花 真 由 関 西 女 性 000010 宮 原 希 美 関 東 女 性 34
セレクティビティとカーディナリティ カーディナリティとは 行 ソースから 戻 される 行 の 予 測 数 カーディナリティ = 表 の 行 数 セレクティビティ 例 )SELECT * FROM customer WHERE 性 別 = 男 性 1 万 行 の 表 セレクティビティは1/2 1 万 1/2=5000 行 顧 客 ID 顧 客 名 地 域 性 別 000001 田 中 隆 二 関 東 男 性 000002 井 上 みき 東 北 女 性 000003 工 藤 朊 子 関 東 女 性 000004 本 井 美 由 紀 九 州 女 性 000005 日 高 千 尋 関 東 女 性 010000 木 村 あかね 関 東 女 性 35
データアクセス 方 法 判 断 例 セレクティビティ カーディナリティの 生 成 に 必 要 セレクティビティが 低 い 場 合 条 件 列 に 索 引 が 定 義 されていると 索 引 を 使 用 してデータを 絞 り 込 む 効 果 が 高 いため 索 引 が 使 用 されやすくなる 例 )SELECT * FROM customer WHERE 性 別 = 男 性 AND 顧 客 ID= 000001 ; 前 提 : 顧 客 ID= 000001 のセレクティビティ : 0.0001 性 別 = 男 性 のセレクティビティ : 0.5 顧 客 ID=1 の 条 件 を 使 用 して 先 にデータを 絞 り 込 む と 効 率 的 顧 客 ID 列 に 索 引 が 定 義 されている 場 合 には 索 引 ス キャンが 選 ばれる 可 能 性 が 高 い 顧 客 ID 顧 客 名 地 域 性 別 000001 田 中 隆 二 関 東 男 性 000002 井 上 みき 東 北 女 性 000003 工 藤 朊 子 関 東 女 性 010000 木 村 あかね 関 東 女 性 カーディナリティ 結 合 やソートオペレーションの 効 率 性 を 検 討 する 際 に 使 用 36
表 結 合 方 法 表 結 合 方 法 の 種 類 表 結 合 方 法 は4つ ネステッドループ 結 合 表 結 合 方 法 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 37
表 結 合 順 序 結 合 順 のパターン 同 時 に3つ 以 上 の 表 を 結 合 することはできない 結 合 順 序 のパターンは 表 の 数 に 依 存 する 表 結 合 順 序 EMP 表 から?DEPT 表 から?それとも 38
表 結 合 方 法 ネステッドループ 結 合 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 概 要 : 最 初 に 外 部 表 にアクセスする 外 部 表 から 戻 された 行 数 分 内 部 表 に アクセスして 条 件 に 合 致 するデータを 戻 す 外 部 表 DEPTNO DNAME 10 OracleDirect 20 RESEARCH 30 Support EMP NO 内 部 表 DEPT NO 1 10 2 20 3 20 ポイント: 1. カーディナリティが 小 さい 表 を 外 部 表 とする 外 部 表 のカーディナリティが 内 部 表 の 参 照 回 数 となる 実 レコード 件 数 ではなくカーディナリティが 小 さい 表 を 外 部 表 とする 2. 内 部 表 のアクセス 効 率 を 上 げる 内 部 表 の 結 合 列 に 索 引 があると 効 率 的 内 部 表 の 結 合 列 に 索 引 がないと 内 部 表 の 全 件 検 索 を 繰 り 返 すため 効 率 が 悪 くなる 場 合 が ある DEPTNO DNAME 20 RESEARCH 4 30 5 30 外 部 ループ while { 外 部 表 から 絞 込 条 件 に 合 致 する1 行 を 取 得 する 1 行 もなければループから 抜 ける while { 内 部 ループ 内 部 表 から 絞 込 条 件 結 合 条 件 に 合 致 する1 行 を 取 得 する 取 得 した 行 を 結 果 として 返 す 1 行 もなければループから 抜 ける } } 39
表 結 合 方 法 ネステッドループ 結 合 実 行 計 画 例 : 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 のステップ: 1. DEPT 表 を 外 部 表 EMP 表 が 内 部 表 となる 2. DEPT 表 をフルスキャンし 条 件 (DNAME= RESEARCH )に 合 致 する 行 をフェッチする 3. 2で 取 得 する 行 数 分 4~5を 繰 り 返 す(ポイント1) 4. EMP 表 の 索 引 EMP_IX2を 索 引 レンジスキャンし(ポイント2) フェッチした 行 と 結 合 する 行 を 特 定 する 5. EMP 表 にアクセスして 特 定 した 行 を 取 得 する 40
表 結 合 方 法 ハッシュ 結 合 動 作 概 要 : 表 1から 抽 出 条 件 に 合 致 する 結 果 セットを 返 す 結 果 セットの 結 合 キーをもとにハッシュ 表 をPGA 内 に 作 成 する 表 2から 絞 込 条 件 に 合 致 する 結 果 セットを 返 す 結 果 セットの 結 合 キーを 順 にハッシュし ハッシュ 表 と 照 ら し 合 わせて 結 合 条 件 に 該 当 する 行 を 特 定 する ポイント: 1. カーディナリティが 小 さい 方 を 先 に 処 理 する PGA 上 に 作 成 されるハッシュ 表 が 小 さくなるため 結 合 処 理 が 効 率 的 になる 2. 一 時 表 領 域 へのI/Oが 発 生 する 可 能 性 がある ハッシュ 表 がメモリ 内 に 収 まらない 場 合 一 時 表 領 域 を 使 用 するため ディスクI/Oの 発 生 により 性 能 が 劣 化 しやすい PGA_AGGREGATE_TARGET もしくは HASH_AREA_SIZEを 考 慮 する 3. 等 価 条 件 でのみ 使 われる 結 合 条 件 が 等 価 結 合 でない( 範 囲 指 定 ) 場 合 ハッシュ 結 合 は 使 われない 4. アクセス 方 法 は 基 本 的 にフルスキャン ハッシュ 結 合 の 場 合 は 基 本 的 に 表 のフルスキャンもしく は 索 引 のフルスキャンとなります 結 合 キー 結 合 キー HASH 関 数 表 結 合 方 法 表 1 表 2 HASH 関 数 HASH 表 PGA ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 TEMP ファイル 41
表 結 合 方 法 ハッシュ 結 合 実 行 計 画 例 : 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 のステップ: 1. DEPT 表 をフルスキャンし 絞 込 条 件 (DNAME= RESEARCH )に 合 致 するデータを 取 り 出 す(ポイント4) 2. 結 合 キーの 値 をハッシュし ハッシュ 表 の 対 応 するパーティションに 値 を 格 納 する 3. EMP 表 をフルスキャンする(ポイント4) 4. 結 合 キーの 値 をハッシュし 該 当 するパーティションに 行 があるか 確 認 し 行 がある 場 合 に は 値 を 適 切 なパーティションに 格 納 する 5. 結 合 した 結 果 を 返 す 42
表 結 合 方 法 ソートマージ 結 合 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 : 表 1の 結 果 セットを 結 合 列 でPGA 内 でソートする 表 2の 結 果 セットを 結 合 列 でPGA 内 でソートする ソート 処 理 はシリアルに 実 行 されます ソート 結 果 をPGA 内 でマージして 結 果 を 返 します ポイント: 1. 一 時 表 領 域 へのI/Oが 発 生 する 可 能 性 が ある ソート 処 理 がメモリ 内 に 収 まらない 場 合 一 時 表 領 域 を 使 用 するため ディスクI/Oの 発 生 により 性 能 が 劣 化 しやすい PGA_AGGREGATE_TARGET もしくは SORT_AREA_SIZEを 考 慮 する 2. 表 1は 一 定 条 件 でソート 処 理 が 回 避 できる ( 表 2のソートは 回 避 できない) 表 1は 結 合 列 に 索 引 が 定 義 されNOT NULL 制 約 が 存 在 する 場 合 索 引 フルスキャンを 実 行 するこ とでソート 処 理 を 回 避 できる 表 2は ソートを 行 いながら 結 合 を 進 めるため ソ ート 処 理 は 回 避 できない 表 1 表 2 ソート ソート PGA TEMP ファイル 43
表 結 合 方 法 ソートマージ 結 合 実 行 計 画 例 : 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 のステップ: 1. DEPT 表 をフルスキャンする 2. DEPT 表 の 結 果 セットを 結 合 列 (DEPTNO)でソートする 3. EMP 表 をフルスキャンする 4. EMP 表 の 結 果 セットを 結 合 列 (DEPTNO)でソートしながら2の 結 果 と 結 合 する 44
表 結 合 方 法 直 積 結 合 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 概 要 : 結 果 セット1の 全 行 と 結 果 セット2の 全 行 を 直 積 ( 掛 け 算 )する 直 積 演 算 ポイント: 2つの 行 ソースに 対 する 結 合 条 件 がな い 場 合 に 直 積 が 選 択 される 結 合 条 件 にもれがないか 確 認 する 結 果 セット1 n 件 結 果 セット2 m 件 アクセス 件 数 n 件 m 件 スター スキーマ 構 造 となっているDWHシステムでは 有 効 な 場 合 がある 45
表 結 合 方 法 直 積 結 合 実 行 計 画 例 : 表 結 合 方 法 ネステッドループ 結 合 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 動 作 のステップ: 1. DEPT 表 をフルスキャンする 2. EMP 表 をフルスキャンする 3. 2の 結 果 セットをソートする 4. 2と4の 結 果 をマージ 46
実 行 計 画 を 判 断 するポイント 判 断 のポイント 分 岐 の 種 類 表 を 直 接 参 照 全 表 スキャン (TABLE ACCESS FULL) データ アクセス 方 法 索 引 を 利 用 して 参 照 索 引 のレンジスキャン (INDEX RANCE SCAN) 索 引 の 一 意 スキャン (INDEX UNIQUE SCAN) 索 引 のフルスキャン (INDEX FULL SCAN) 索 引 の 高 速 フルスキャン (INDEX FAST FULL SCAN) 索 引 のスキップスキャン (INDEX SKIP SCAN) ネステッドループ 結 合 表 結 合 方 法 ハッシュ 結 合 ソートマージ 結 合 直 積 結 合 表 結 合 順 序 EMP 表 から?DEPT 表 から?それとも 47
<Insert Picture Here> まとめ 48
最 適 化 のアプローチ SQL 単 体 の 最 適 化 それぞれの 特 性 と 考 慮 点 から 検 討 検 証 判 断 すること 適 切 な 索 引 が 作 成 されているか? 最 適 な 索 引 が 使 用 されているか? WHERE 句 条 件 が 適 切 か(コーディング 条 件 指 定 )? 表 のフルスキャンの 方 が 効 率 的 か( 索 引 を 使 用 しても10% 以 上 の 表 データアクセスなど)? ネステッドループ 結 合 で 内 部 表 のフルスキャンが 発 生 していないか? カーディナリティの 小 さい 表 から 結 合 されているか? SQLによるデータの 取 得 を 最 小 のブロックアクセスで 行 うことが 原 則 です しかしながら SQL 単 体 を 最 適 化 (レスポンス 改 善 )するアプローチだけ では 不 十 分 です 49
最 適 化 のアプローチ システム 全 体 の 最 適 化 実 行 計 画 の 違 いによる 必 要 リソース(CPU,メモリなど)のバランスで 判 断 サーバ 上 でOracle 以 外 のアプリケーションが 動 作 し 物 理 メモリが 圧 迫 されている ハッシュ 結 合 やソートマージ 結 合 が 同 時 に 実 行 されて 物 理 メモリが 圧 迫 されないか CPU 使 用 率 が 高 い 無 駄 なソート 処 理 がないか ネステッドループ 結 合 によりCPU 負 荷 が 高 くなっていないか SQLパフォーマンス 問 題 を 解 決 するには SQL 単 体 の 最 適 化 だけではなく システム 全 体 の 最 適 化 をふまえて 判 断 することが 重 要 である 50
<Insert Picture Here> Appendix 51
表 結 合 順 序 現 状 を 分 析 する 手 順 1 表 の 結 合 関 係 をクリアにする SQL 文 索 引 定 義 情 報 統 計 情 報 WHERE 句 に 含 まれている 列 結 合 されている 列 同 士 の 結 合 関 係 推 移 律 選 択 率 とカーディナリティ 2 結 合 順 序 のスタートポイントを 見 つける どれくらい 絞 れるか 絞 り 込 める 表 (スタートポイント)はどれか 52
表 結 合 順 序 1 表 の 結 合 関 係 をクリアにする SQL 文 索 引 定 義 情 報 [SQL 文 ] SELECT count(*) FROM tab1 t1, tab2 t2, tab3 t3, tab4 t4, tab5 t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t2.class = t5.class AND t3.class = t4.class AND t4.flag = 'Y' AND t5.num = TO_NUMBER(:b1) AND t4.code = TO_NUMBER(:b2) AND t1.start_date <= (TO_DATE(:b3, 'yyyymmdd') + 1) AND t1.end_date > TO_DATE(:b3, 'yyyymmdd') [ 索 引 の 定 義 ] TABLE_NAME INDEX_NAME COLUMN_NAME KIND ----------- ----------- ------------------ --------------- TAB1 TAB1_P1 ID Primary Key TAB1_U1 ID, END_DATE Unique Key TAB2 TAB2_PK ID,, ZONE Primary Key TAB2_I1, ID TAB2_I2 ID TAB3 TAB3_P1 ID,, DEPTH Primary Key TAB3_I1, ID TAB4 TAB4_PK CODE Primary Key TAB4_I1, CODE TAB5 TAB5_PK Primary Key TAB5_U1 DATA,, NUM Unique Key TAB5_I1 NUM, DATA 53
表 結 合 順 序 1 表 の 結 合 関 係 をクリアにする 統 計 情 報 [SQL 文 ] SELECT count(*) FROM tab1 t1, tab2 t2, tab3 t3, tab4 t4, tab5 t5 WHERE t1.id = t2.id AND t1.id = t3.id AND t2.class = t5.class AND t3.class = t4.class AND t4.flag = 'Y' AND t5.num = TO_NUMBER(:b1) AND t4.code = TO_NUMBER(:b2) AND t1.start_date <= (TO_DATE(:b3, 'yyyymmdd') + 1) AND t1.end_date > TO_DATE(:b3, 'yyyymmdd') [ 表 の 統 計 情 報 ] OWNER TABLE_NAME COLUMN_NAME NUM_ROWS NUM_DISTINCT ------ ----------- ------------ --------- ------------ SCOTT TAB1 ID 275 275 SCOTT TAB1 START_DATE 275 5 SCOTT TAB1 END_DATE 275 1 SCOTT TAB2 ID 282 273 SCOTT TAB2 282 17 SCOTT TAB3 ID 17442 274 SCOTT TAB3 17442 8210 SCOTT TAB4 CODE 834030 834030 SCOTT TAB4 FLAG 834030 1 SCOTT TAB4 834030 834030 SCOTT TAB5 NUM 133 132 SCOTT TAB5 133 133 54
表 結 合 順 序 1 表 の 結 合 関 係 をクリアにする 登 場 するオブジェクトを 抽 出 し WHERE 句 の 列 を 書 き 出 す TAB5 NUM = :b1 TAB2 ID TAB4 CODE = :b2 FLAG = Y TAB3 ID TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 索 引 の 使 用 できる 列 55
表 結 合 順 序 1 表 の 結 合 関 係 をクリアにする 登 結 合 場 列 するオブジェクトを を 結 ぶ 抽 出 し WHERE 句 の 列 を 書 き 出 す TAB5 NUM = :b1 TAB2 ID TAB4 CODE = :b2 FLAG = Y TAB3 ID TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 索 引 の 使 用 できる 列 結 合 されている 列 56
表 結 合 順 序 1 表 の 結 合 関 係 をクリアにする 登 A=BかつB=Cであれば A=Cである 結 合 場 列 するオブジェクトを を 結 んでみる 抽 出 し WHERE 論 理 条 件 を 見 句 つける の 列 を 書 き 出 す TAB5 NUM = :b1 TAB2 ID TAB4 CODE = :b2 FLAG = Y TAB3 ID ( 推 移 律 ) TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 索 引 の 使 用 できる 列 結 合 されている 列 57
C:133/133=1 S:1/133 1 表 の 結 合 関 係 をクリアにする 登 A=BかつB=Cであれば A=Cである カーディナリティとセレクティビティを 結 合 場 列 するオブジェクトを を 結 んでみる 抽 出 し WHERE 整 論 理 する 条 件 を 見 句 つける の 列 を 書 き 出 す TAB5 C:83 万 /83 万 =1 S:1/83 万 TAB4 表 結 合 順 序 NUM = :b1 CODE = :b2 FLAG = Y C:83 万 /83 万 =1 S:1/83 万 C:133/132=1 S:1/132 C:83 万 /1=83 万 S:1/1 C:282/17=16.5 S:1/17 TAB2 ID TAB3 ID C:17442/8210=2 S:1/8210 ( 推 移 律 ) C:282/273=1 S:1/273 C:17442/274=63.5 S:1/274 C:カーディナリ S: 選 択 率 C:275/5=55 S:1/5 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 C:275/275=1 S:1/275 C:275/1=275 S:1/1 索 引 の 使 用 できる 列 結 合 されている 列 58
表 結 合 順 序 現 状 を 分 析 する 手 順 1 表 の 結 合 関 係 をクリアにする SQL 文 索 引 定 義 情 報 統 計 情 報 WHERE 句 に 含 まれている 列 結 合 されている 列 同 士 の 結 合 関 係 推 移 律 選 択 率 とカーディナリティ 2 結 合 順 序 のスタートポイントを 見 つける どれくらい 絞 れるか 絞 り 込 める 表 (スタートポイント)はどれか 59
C:133/133=1 S:1/133 2 結 合 順 序 のスタートポイントを 見 つける 登 A=BかつB=Cであれば A=Cである どれくらい 結 合 場 列 するオブジェクトを を 結 行 んでみる が 絞 れるか 考 える 抽 出 し WHERE 論 理 条 件 を 見 句 つける の 列 を 書 き 出 す TAB5 C:83 万 /83 万 =1 S:1/83 万 TAB4 表 結 合 順 序 NUM = :b1 CODE = :b2 FLAG = Y 絞 込 みで1 件 絞 込 みで1 件 C:83 万 /83 万 =1 S:1/83 万 C:133/132=1 S:1/132 C:83 万 /1=83 万 S:1/1 C:282/17=16.5 S:1/17 TAB2 ID TAB3 ID C:17442/8210=2 S:1/8210 ( 推 移 律 ) C:282/273=1 S:1/273 絞 込 めないの で17442 件 C:17442/274=63.5 S:1/274 C:カーディナリ S: 選 択 率 絞 込 めないの で282 件 C:275/5=55 S:1/5 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 C:275/275=1 S:1/275 絞 込 みで 0~275 件 C:275/1=275 S:1/1 索 引 の 使 用 できる 列 結 合 されている 列 60
C:133/133=1 S:1/133 2 結 合 順 序 のスタートポイントを 見 つける 登 A=BかつB=Cであれば A=Cである どれくらい 絞 結 り 合 場 込 列 するオブジェクトを める を 結 絞 表 んでみる れるか (スタートポイント)の 抽 出 し WHERE 候 論 補 理 を 出 条 す件 を 見 句 つける の 列 を 書 き 出 す TAB5 C:83 万 /83 万 =1 S:1/83 万 TAB4 表 結 合 順 序 NUM = :b1 CODE = :b2 FLAG = Y 絞 込 みで1 件 絞 込 みで1 件 C:83 万 /83 万 =1 S:1/83 万 C:133/132=1 S:1/132 Start Point C:83 万 /1=83 万 S:1/1 Start Point C:282/17=16.5 S:1/17 TAB2 ID TAB3 ID C:17442/8210=2 S:1/8210 ( 推 移 律 ) C:282/273=1 S:1/273 絞 込 めないの で17442 件 C:17442/274=63.5 S:1/274 C:カーディナリ S: 選 択 率 絞 込 めないの で282 件 C:275/5=55 S:1/5 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 列 名 C:275/275=1 S:1/275 絞 込 みで 0~275 件 Start Point C:275/1=275 S:1/1 索 引 の 使 用 できる 列 結 合 されている 列 61
現 在 の 実 行 計 画 を 把 握 する 1つ 目 の 結 合 Execution Plan --------------------------------------------------- SELECT STATEMENT GOAL: CHOOSE SORT (AGGREGATE) NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS GOAL: ANALYZED (FULL) OF 'TAB1' INDEX GOAL: ANALYZED (RANGE SCAN) OF 'TAB2_PK' (UNIQUE) INDEX GOAL: ANALYZED (FULL SCAN) OF 'TAB3_I1' (NON-UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB4' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB4_PK' (UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB5' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB5_PK' (UNIQUE) フォーカスする 処 理 外 部 表 になる 行 ソース 内 部 表 になる 行 ソース 62
現 在 の 実 行 計 画 を 把 握 する 1つ 目 の 結 合 TAB2 ID NLアクセス X 回 X*1 件 ヒット アクセス1 回 絞 込 でX 件 ヒット 1 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 Start Point 63
現 在 の 実 行 計 画 を 把 握 する 2つ 目 の 結 合 Execution Plan --------------------------------------------------- SELECT STATEMENT GOAL: CHOOSE SORT (AGGREGATE) NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS GOAL: ANALYZED (FULL) OF 'TAB1' INDEX GOAL: ANALYZED (RANGE SCAN) OF 'TAB2_PK' (UNIQUE) INDEX GOAL: ANALYZED (FULL SCAN) OF 'TAB3_I1' (NON-UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB4' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB4_PK' (UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB5' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB5_PK' (UNIQUE) フォーカスする 処 理 外 部 表 になる 行 ソース 内 部 表 になる 行 ソース 64
現 在 の 実 行 計 画 を 把 握 する 2つ 目 の 結 合 TAB2 ID NLアクセス X 回 X*1 件 ヒット アクセス1 回 絞 込 でX 件 ヒット TAB3 1 2 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 Start Point ID NLアクセス X 回 X*63.5 件 ヒット 65
現 在 の 実 行 計 画 を 把 握 する 3つ 目 の 結 合 Execution Plan --------------------------------------------------- SELECT STATEMENT GOAL: CHOOSE SORT (AGGREGATE) NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS GOAL: ANALYZED (FULL) OF 'TAB1' INDEX GOAL: ANALYZED (RANGE SCAN) OF 'TAB2_PK' (UNIQUE) INDEX GOAL: ANALYZED (FULL SCAN) OF 'TAB3_I1' (NON-UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB4' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB4_PK' (UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB5' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB5_PK' (UNIQUE) フォーカスする 処 理 外 部 表 になる 行 ソース 内 部 表 になる 行 ソース 66
現 在 の 実 行 計 画 を 把 握 する 3つ 目 の 結 合 TAB2 ID NLアクセス X 回 X*1 件 ヒット アクセス1 回 絞 込 でX 件 ヒット TAB4 CODE = :b2 FLAG = Y 3 TAB3 ID NL アクセスX*63.5 回 絞 込 で2 件 ヒット 1 2 TAB1 NLアクセス X 回 X*63.5 件 ヒット ID START_DATE <= :b3+1 END_DATE > :b3 Start Point 67
現 在 の 実 行 計 画 を 把 握 する 4つ 目 の 結 合 Execution Plan --------------------------------------------------- SELECT STATEMENT GOAL: CHOOSE SORT (AGGREGATE) NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS GOAL: ANALYZED (FULL) OF 'TAB1' INDEX GOAL: ANALYZED (RANGE SCAN) OF 'TAB2_PK' (UNIQUE) INDEX GOAL: ANALYZED (FULL SCAN) OF 'TAB3_I1' (NON-UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB4' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB4_PK' (UNIQUE) TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'TAB5' INDEX GOAL: ANALYZED (UNIQUE SCAN) OF 'TAB5_PK' (UNIQUE) フォーカスする 処 理 外 部 表 になる 行 ソース 内 部 表 になる 行 ソース 68
現 在 の 実 行 計 画 を 把 握 する 4つ 目 の 結 合 TAB5 NUM = :b1 4 TAB2 ID NLアクセス X 回 X*1 件 ヒット アクセス1 回 絞 込 でX 件 ヒット TAB4 NL アクセス2 回 絞 込 で1 件 ヒット CODE = :b2 FLAG = Y 3 TAB3 ID 1 2 TAB1 ID NLアクセス X 回 X*63.5 件 ヒット START_DATE <= :b3+1 END_DATE > :b3 Start Point NL アクセスX*63.5 回 絞 込 で2 件 ヒット 69
現 在 の 実 行 計 画 を 分 析 する TAB5 NUM = :b1 4 TAB2 ID NLアクセス X 回 X*1 件 ヒット アクセス1 回 絞 込 でX 件 ヒット TAB4 NL アクセス2 回 絞 込 で1 件 ヒット CODE = :b2 FLAG = Y 3 TAB3 ID 1 2 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 Start Point 表 アクセス 回 数 カーディナリティ TAB1 1 回 X 行 NL アクセスX*63.5 回 絞 込 で2 件 ヒット NLアクセス X 回 X*63.5 件 ヒット TAB2 X 回 X 1 行 TAB3 X 回 X 63.5 行 TAB4 X 63.5 回 2 行 TAB5 2 回 1 行 70
現 在 の 実 行 計 画 を 分 析 する ネステッド ネステッド 4 TAB5 索 引 ユニーク 3 ネステッド TAB4 索 引 ユニーク 2 TAB1 フルスキャン ネステッド 1 TAB2 索 引 レンジスキャン TAB3 索 引 フルスキャン 表 アクセス 回 数 カーディナリティ TAB1 1 回 X 行 TAB2 X 回 X 1 行 TAB3 X 回 X 63.5 行 TAB4 X 63.5 回 2 行 TAB5 2 回 1 行 71
TAB5 実 行 計 画 を 検 討 する 別 のチューニング 案 NUM = :b1 TAB2 4 ID NL アクセス2 回 2*1 件 ヒット NL アクセス2 回 絞 込 で1 件 ヒット NLアクセス2 回 2*1 件 ヒット 3 2 TAB1 ID START_DATE <= :b3+1 END_DATE > :b3 TAB4 アクセス1 回 絞 込 で1 件 ヒット TAB3 ID CODE = :b2 FLAG = Y 1 Start Point NLアクセス 1 回 1*2 件 ヒット 表 アクセス 回 数 カーディナリティ TAB4 1 回 1 行 TAB3 1 回 2 行 TAB1 2 回 2 行 TAB2 2 回 2 行 TAB5 2 回 1 行 72
実 行 計 画 を 検 討 する 別 のチューニング 案 ネステッド ネステッド 4 TAB5 索 引 ユニーク ネステッド 3 TAB2 索 引 レンジスキャン ネステッド 2 TAB1 フルスキャン 表 アクセス 回 数 カーディナリティ TAB4 1 回 1 行 TAB4 索 引 ユニーク 1 TAB3 索 引 フルスキャン TAB3 1 回 2 行 TAB1 2 回 2 行 TAB2 2 回 2 行 TAB5 2 回 1 行 73
OTN ダイセミ でスキルアップ!! 一 般 的 な 技 術 問 題 解 決 方 法 などを 知 りたい! セミナ 資 料 など 技 術 コンテンツがほしい! Oracle Technology Network(OTN)を 御 活 用 下 さい http://otn.oracle.co.jp/forum/index.jspa?categoryid=2 一 般 的 技 術 問 題 解 決 にはOTN 掲 示 版 の データベース 一 般 をご 活 用 ください OTN 掲 示 版 は 基 本 的 にOracleユーザー 有 志 からの 回 答 となるため100% 回 答 があるとは 限 りません ただ 過 去 の 履 歴 を 見 ると 質 問 の 大 多 数 に 関 してなんらかの 回 答 が 書 き 込 まれております http://www.oracle.com/technology/global/jp/ondemand/otn-seminar/index.html 過 去 のセミナ 資 料 動 画 コンテンツはOTNの OTNセミナー オンデマンド コンテンツ へ ダイセミ 事 務 局 にダイセミ 資 料 を 請 求 頂 いても お 受 けできない 可 能 性 がございますので 予 めご 了 承 ください ダイセミ 資 料 はOTNコンテンツ オン デマンドか セミナ 実 施 時 間 内 にダウンロード 頂 くようお 願 い 致 します 74
OTNセミナー オンデマンド コンテンツ ダイセミで 実 施 された 技 術 コンテンツを 動 画 で 配 信 中!! ダイセミのライブ 感 はそのままに お 好 きな 時 間 で 受 講 頂 けます 最 新 情 報 つぶやき 中 oracletechnetjp 人 気 コンテンツは? お 勧 め 情 報 公 開 予 告 など OTN オンデマンド 掲 載 のコンテンツ 内 容 は 予 告 なく 変 更 になる 可 能 性 があります 期 間 限 定 での 配 信 コンテンツも 含 まれております お 早 めにダウンロード 頂 くことをお 勧 めいたします 75
Oracle エンジニアのための 技 術 情 報 サイト オラクルエンジニア 通 信 http://blogs.oracle.com/oracle4engineer/ 最 新 情 報 つぶやき 中 oracletechnetjp 技 術 資 料 ダイセミの 過 去 資 料 や 製 品 ホワイト ペーパー スキルアップ 資 料 などを 多 様 な 方 法 で 検 索 できます キーワード 検 索 レベル 別 カテゴ リ 別 製 品 機 能 別 コラム オラクル 製 品 に 関 する 技 術 コラムを 毎 週 お 届 けします 決 してニッチではなく 誰 もが 明 日 から 使 える 技 術 の あ そうだったん だ! をお 届 けします オラクルエンジニア 通 信 先 月 はこんな 資 料 が 人 気 でした Oracle Database 11gR2 RAC インストレーショ ン ガイド ASM 版 Microsoft Windows x86-64 Oracle Database 11gR2 旧 バージョンからのア ップグレード 76
オラクル クルクルキャンペーン あのOracle Database Enterprise Editionが 超 おトク!! Oracle Databaseの ライセンス 価 格 を 大 幅 に 抑 えて ご 導 入 いただけます 多 くのお 客 様 でサーバー 使 用 期 間 とされる 5 年 間 にライセンス 期 間 を 限 定 期 間 途 中 で 永 久 ライセンスへ 差 額 移 行 5 年 後 に 新 規 ライセンスを 購 入 し 継 続 利 用 5 年 後 に 新 システムへデータを 移 行 2010 年 11 月 30 日 まで Enterprise Editionはここが 違 う!! 圧 倒 的 なパフォーマンス! データベース 管 理 がカンタン! データベースを 止 めなくていい! もちろん 障 害 対 策 も 万 全! 詳 しくはコチラ http://www.oracle.co.jp/campaign/kurukuru/index.html お 問 い 合 わせフォーム http://www.oracle.co.jp/inq_pl/inquiry/quest?rid=28 77
あなたにいちばん 近 いオラクル Oracle Direct まずはお 問 合 せください Oracle Direct 検 索 システムの 検 討 構 築 から 運 用 まで ITプロジェクト 全 般 の 相 談 窓 口 としてご 支 援 いたします システム 構 成 やライセンス/ 購 入 方 法 などお 気 軽 にお 問 い 合 わせ 下 さい Web 問 い 合 わせフォーム フリーダイヤル 専 用 お 問 い 合 わせフォームにてご 相 談 内 容 を 承 ります http://www.oracle.co.jp/inq_pl/inquiry/quest?rid=28 フォームの 入 力 には Oracle Direct Seminar 申 込 時 と 同 じ ログインが 必 要 となります こちらから 詳 細 確 認 のお 電 話 を 差 し 上 げる 場 合 がありますので ご 登 録 さ れている 連 絡 先 が 最 新 のものになっているか ご 確 認 下 さい 0120-155-096 月 曜 ~ 金 曜 9:00~12:00 13:00~18:00 ( 祝 日 および 年 末 年 始 除 く) 78