オラクルコンサルが語る...

50
オラクルコンサルが語る 新しいチューニング&運用アプローチ 日本オラクル株式会社 コンサルティングサービス統括 テクノロジーソリューションコンサルティング統括本部 アソシエイトコンサルタント 内田慎介

Upload: others

Post on 24-Dec-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

オラクルコンサルが語る新しいチューニング&運用アプローチ日本オラクル株式会社コンサルティングサービス統括 テクノロジーソリューションコンサルティング統括本部アソシエイトコンサルタント 内田慎介

Page 2: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 2

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

Agenda

• Introduction

• Cost Base Optimizer

• 今までのチューニング&運用アプローチ

• SQL文はバインド変数化する

• 統計情報を運用管理する

• 今までのチューニング&運用アプローチの課題

• 11gからの新機能• 新機能を理解する

• Cardinality Feedback

• Adaptive Cursor Sharing

• SQL Plan Management

• 新しいチューニング&運用アプローチ

• 統計情報を運用管理する + SPMを利用する

• 新しいチューニング&運用アプローチ

3

Page 4: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 4

Introduction

Cost Base Optimizer

<Insert Picture Here>

Page 5: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

実データ

CBOのインプット情報とアウトプット情報

• Cost Base Optimizer (CBO)

• 問い合わせ結果を生成する最も効率的な方法を決定し、実行計画を作成する機能

• 統計情報• CBOのインプット情報の1つ

• 表、索引、使用している領域、カーディナリティ、データ分布などのデータ特性を表す情報

• 実行計画• CBOのアウトプット情報

• Cost Base Optimizer (CBO)によって生成されたSQL実行アルゴリズム

5

SQLテキスト

パラメータ

オブジェクト構造

環境

実行計画

レスポンス

統計情報

Cost Base Optimizer

Page 6: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

SQL文処理イメージ

6

SQL発行

CBO

パーサ

行ソース

ジェネレータ

共有プール

SQL実行 結果出力

SQL実行可否チェック

SQL情報チェック

ソフトパース

ハードパース SQL情報キャッシュ

実行計画を渡す

実行計画を使ってSQLの実行に必要なデータ構造を生成

• 大きく2つのSQL実行の流れが存在します

• ソフトパース• 共有プール上にSQL情報がキャッシュされていた

• ハードパース• 共有プール上にSQL情報がキャッシュされていなかった

Page 7: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 7

今までのチューニング&運用アプローチ

SQL文はバインド変数化する

統計情報を運用管理する

今までのチューニング&運用アプローチの課題

<Insert Picture Here>

Page 8: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

共有プール

バインド変数化

8

• WHERE句に条件を指定する場合は、バインド変数を使用する• バインド変数を使用しない場合、本来必要でない再解析が多発し、CPU負荷の上昇や共

有プール内の他SQL用の解析結果を追い出すことによるDB全体のスループット低下を招く可能性が高くなる

• ただし、バインド変数を使用せずに値データの異なるSQLを共有させずに、SQLごとに最適な実行計画で処理を行なった方が性能がよい場合もある

SELECT NAME FROM EMP

WHERE EMP_ID = :v_emp_id ;

バインド変数を使用したSQL

SELECT NAME FROM EMP

WHERE EMP_ID = 50 ;

バインド変数を使用しないSQL

共有プール

SELECT NAME FROM EMP

WHERE EMP_ID = 111 ;

SELECT NAME FROM EMP

WHERE EMP_ID = 150 ;

SELECT NAME FROM EMP

WHERE EMP_ID = 200 ;

SELECT NAME FROM EMP

WHERE EMP_ID = 222 ;

SELECT NAME FROM EMP

WHERE EMP_ID = 100 ;

Page 9: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

カーソルの共有機能(cursor sharing)

9

• cursor_sharing パラメータの設定によって、WHERE句の条件が定数であってもバインド変数に置換することが可能となる機能

cursor_sharing = similar の場合

WHERE句の条件の違いが実行計画に影響(条件列のヒストグラム統計が取得されているetc) がなければ、カーソルが共有される

cursor_sharing = force の場合

意味的に同じSQL文であれば、必ずカーソルが共有される

共有プール

SELECT NAME FROM EMP

WHERE EMP_ID = 100 ;

SELECT NAME FROM EMP

WHERE EMP_ID = 50 ;

cursor_sharing = exact の場合(デフォルト)

バインド変数化されていなければ、カーソルは共有されない

Page 10: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

バインド変数先読み機能(bind peek)

10

• ハードパース時にバインド変数の値を考慮して実行計画を算出する機能 bind peek が無効な場合

SQL実行 結果出力SQL解析

バインド変数値をセットし、SQLを実行

バインド変数値を考慮せず、実行計画生成

SQL実行 結果出力SQL解析

SQL実行バインド変数値を取得し、その値を元に実行計画生成

bind peek が有効な場合

メリット バインド変数値を考慮した実行計画を生成できる

デメリットハードパース時のバインド変数値に最適化された実行計画が、その後のソフトパース時も利用されるため、性能劣化する可能性があり

時間

データ数

ハードパース ソフトパース

先読みバインド変数値

実行時実データ値

※揮発性の高い表であるため、ハードパースされたバインド変数値とその後ソフトパースされるバインド変数値に大きな差異が発生し、実行計画が変動する可能性が高まる

Page 11: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 11

今までのチューニング&運用アプローチ

SQL文はバインド変数化する

統計情報を運用管理する

今までのチューニング&運用アプローチの課題

<Insert Picture Here>

Page 12: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

レスポンス

統計情報とSQLレスポンスの関係

12

• 統計情報以外のインプットは固定的であることが多い• 統計情報の変動が実行計画の変動を引き起こす要因となることが多い

実データ

SQLテキスト

パラメータ

オブジェクト構造

環境

実行計画

統計情報

Cost Base Optimizer

• 統計情報を判断材料とした実行計画の生成例

SELECT NAME FROM EMP

WHERE EMP_ID = 50 ;

EMP表データ件数

10000件

Cost Base Optimizer EMP表のデータ件数に対して取得するデータ件数が少ないので、全表SCANより索引SCANを利用しよう!

※EMP_IDはPrimary Key

Page 13: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

実データと統計情報のかい離による性能劣化

13

• システムを運用を続けていると、実データ数は増減していく• データ数が増えたことによって、今までFULL SCANを行なっていたものより、INDEX

SCANの方が効率よくなることがある

• 統計情報を取得後更新がなく、統計情報と実データ間に差異が発生した状態にてSQLを実行すると、CBOに効率の悪い実行計画を立てさせる大きな原因となる

FULL SCAN

データ数

レスポンス時間

性能臨界点

INDEX SCAN

統計情報取得 SQL実行

※SQL実行時の実際のデータ量より、統計情報の見積もりが極端に小さいときに注意が必要!

データ量が少ないタイミングで統計情報収集

実際にSQLが実行された時にデータ量が多かった場合、INDEX SCANに比べて大幅に性能が落ちるFULL SCANが実行される

実行計画B

実行計画A

Page 14: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

統計情報取得手法

14

• 表のデータ変動特性別に個別統計情報を判断する

常に一定

データ量

時間

動的静的

単調増加 増減あり(規則的)

データ量

時間

データ量

時間

自動統計情報

1度だけ統計情報を取得すればよい。データ量の変動がないため、自動統計情報収集にて1度取得が行われた後に収集は行われない。

自動統計情報

自動統計情報収集で取得したデータがその時点の統計情報で最大のデータ量となる。

個別統計情報

データ量が最大となるタイミングで手動にて統計情報を取得する。

Page 15: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 15

今までのチューニング&運用アプローチ

SQL文はバインド変数化する

統計情報を運用管理する

今までのチューニング&運用アプローチの課題

<Insert Picture Here>

Page 16: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

実データ

SQLテキスト

今までのチューニング&運用アプローチの課題

16

• DBAや開発者は間接的に性能管理を行なっている

• SQLの性能は、CBOのインプット情報を管理することにより最適化する

• SQLの性能に直接的に影響を与える実行計画は管理対象外

レスポンスパラメータ

オブジェクト構造

環境

実行計画

統計情報

Cost Base Optimizer

Page 17: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 17

11gからの新機能

新機能を理解する

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

<Insert Picture Here>

Page 18: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

実データ

SQLテキスト

新機能を理解する

18

• CBOのインプット情報を管理することの重要性は同様

• 新機能を活用することで、CBOのアウトプットである実行計画を直接的に管理することが可能

レスポンスパラメータ

オブジェクト構造

環境

実行計画

統計情報

Cost Base Optimizer

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

Page 19: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 19

11gからの新機能

新機能を理解する

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

<Insert Picture Here>

Page 20: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

SQLテキスト

機能概要

20

• Cardinality Feedback 機能• 実行計画を生成するCBOのインプット情報に実データのカーディナリティを加えること

によって、より最適な実行計画を生成する機能

• ハードパース時、統計情報と実データのカーディナリティにかい離がある場合、そのカーディナリティを記録し、その後実行される同一SQLの実行計画は、実データを加味して最適になるように変更される可能性がある

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

実データ

レスポンスパラメータ

オブジェクト構造

環境

実行計画

Cost Base Optimizer

Cardinality Feedback

統計情報

Page 21: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(1/2)

21

• SQL実行時(ハードパースのみ)に統計情報と実データのカーディナリティにかい離があるかどうかを確認する

SQL発行

CBO

パーサ

行ソース

ジェネレータ

共有プール

SQL実行 結果出力

SQL実行可否チェック

SQL情報チェック

ハードパース SQL情報キャッシュ

実行計画を渡す

実行計画を使ってSQLの実行に必要なデータ構造を生成

カーディナリティ

確認

かい離無

かい離有

メモリ上にカーディナリティを記録

次回実行時にハードパース(子カーソルを生成)する

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 22: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(2/2)

22

• カーディナリティ記録後のSQL実行は、カーディナリティを調整し、ハードパースにてSQLを再実行します

SQL発行

CBO

パーサ

行ソース

ジェネレータ

共有プール

SQL実行 結果出力

ハードパース SQL情報キャッシュ

実行計画を渡す

実行計画を使ってSQLの実行に必要なデータ構造を生成

カーディナリティ調整し

再度実行計画生成

SQL実行可否チェック

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 23: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

メリットと考慮事項

23

• 統計情報(カーディナリティ)の適切な取得ができなかった場合でも、実データと統計情報のかい離を補正した上で実行計画を生成することが可能

メリット

考慮事項

• CBOのインプット情報(統計情報など)を固定した場合でも、実行計画が変化する可能性がある

• 実データのカーディナリティを記録するのは、ハードパース時のみである

• カーディナリティを記録した後の実行は必ずハードパースとなる

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 24: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 24

11gからの新機能

新機能を理解する

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

<Insert Picture Here>

Page 25: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

機能概要

25

• バインド変数化の課題• ハードパース時のバインド変数値に最適化された実行計画が、その後のソフトパース時も

利用されるため、性能劣化する可能性があり

• Adaptive Cursor Sharing 機能• 同一SQLでもバインド変数値が異なるため既存の実行計画とは異なる実行計画が適切で

ある場合に、新たに子カーソルを生成し、実行計画が適切であるかどうかを自動的に判断

実行計画ACBO

実行計画B

バインド変数値

• x = 1

• x = 10000

Adaptive Cursor Sharing

x = 1 で最適化された実行計画

例) INDEX SCAN

x = 10000 で最適化された実行計画

例) TABLE FULL SCAN

• 以下のv$表の値を随時更新しながら、実行計画を生成している

バインド対応

v$sql v$sql_shared_cursor

カーソル共有

v$sql_cs_histogram

カーソルヒストグラム

v$sql_cs_statistics

カーソル統計情報

v$sql_cs_selectivity

カーソル選択性

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 26: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(1/5)

26

• バインド変数値x=1 を使用したSQL文を2回実行• 1回目はハードパースで実行し、2回目は、ソフトパースで実行

実行計画ACBO

バインド変数値

• x = 1

Adaptive Cursor Sharingx = 1 で最適化された実行計画

例) INDEX SCAN

バインド対応

v$sql

CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE

0 Y N Y

v$sql_cs_histogram

カーソルヒストグラムCHILD_NUMBER BUCKET_ID COUNT

0 0 2

0 1 0

0 2 0

※今後セレクティビティが変わる可能性のあるSQL文であるとして認識されている

※BUCKET_ID=0 に、実行した回数分バケットの値がCOUNTされる

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 27: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(2/5)

27

• バインド変数値が大きく異なるx=10000 を使用したSQL文を2回実行• ソフトパースで実行され、子カーソルは生成されない

実行計画ACBO

バインド変数値

• x = 10000

Adaptive Cursor Sharingx = 1 で最適化された実行計画

例) INDEX SCAN

バインド対応

v$sql

CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE

0 Y N Y

v$sql_cs_histogram

カーソルヒストグラムCHILD_NUMBER BUCKET_ID COUNT

0 0 2

0 1 2

0 2 0

※先ほどと変化なしで、子カーソルは生成されていない

※ BUCKET_ID=1 に、実行した回数分バケットの値がCOUNTされる

※セレクティビティが大きく変化することが検出されている

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 28: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(3/5)

28

• バインド変数値x=10000 を使用したSQL文を3回目を実行• ハードパースで実行し、新たな子カーソルが生成される

実行計画ACBO

バインド変数値

• x = 10000

Adaptive Cursor Sharingx = 1 で最適化された実行計画

例) INDEX SCAN

バインド対応

v$sql

CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE

0 Y N Y

1 Y Y Y

v$sql_cs_histogram

カーソルヒストグラム

CHILD_NUMBER BUCKET_ID COUNT

1 0 0

1 1 1

1 2 0

0 0 2

0 1 2

0 2 0

※BUCKET_ID=1がCOUNT

実行計画B

x = 10000 で最適化された実行計画

例) TABLE FULL SCAN

※新たに生成された子カーソルは、バインド対応(bind-aware)となる

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 29: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(4/5)

29

• バインド変数値x=1 を使用したSQL文を実行• ソフトパースでは実行されず、ハードパースで実行し、新たな子カーソルが生成される

実行計画ACBO

バインド変数値

• x = 1

Adaptive Cursor Sharingx = 1 で最適化された実行計画

例) INDEX SCAN

バインド対応

v$sql

CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE

0 Y N N

1 Y Y Y

2 Y Y Y

実行計画B

x = 10000 で最適化された実行計画

例) TABLE FULL SCAN

※以前実行されたバインド変数値のSQL文ではあるが、最初に作成された子カーソル(CHILD_NUMBER=0)は、バインド対応していないため、ハードパースにて新たに子カーソルが生成されてしまう。

※新たに作成された子カーソルの実行計画は、最初に作成された子カーソルの実行計画と同一のため、CHILD_NUMBER=0はAgeOut対象となる。

実行計画A

x = 1 で最適化された実行計画

例) INDEX SCAN

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 30: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

アーキテクチャ(5/5)

30

• バインド変数値x=2 を使用したSQL文を実行• ソフトパースで実行され、子カーソルは生成されない

実行計画ACBO

バインド変数値

• x = 2

Adaptive Cursor Sharingx = 1 で最適化された実行計画

例) INDEX SCAN

バインド対応

v$sql

実行計画B

x = 10000 で最適化された実行計画

例) TABLE FULL SCAN

※初めて実行されたバインド変数値のSQL文ではあるが、バインド対応している子カーソルのカーソル選択性の範囲として認識されているため、ソフトパースにてSQLは実行され新たな子カーソルは生成されない。

実行計画A

x = 1, 2 で最適化された実行計画

例) INDEX SCAN

CHILD_NUMBER IS_BIND_SENSITIVE IS_BIND_AWARE IS_SHAREABLE

0 Y N N

1 Y Y Y

2 Y Y Y

AgeOut対象

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 31: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

メリットと考慮事項

31

• 自動的にバインド変数値を考慮するため、追加設定必要なし

• 重複する実行計画を持つ子カーソルは、共有プールからのAgeOut対象となり、共有プールは効率的に使用される

• バインド変数化されていない環境においても、cursor_sharing = force とすることで本機能を使用することが可能

メリット

考慮事項

• バインド変数値による最適な実行計画が生成されるまでの時間を考慮する必要がある

• インスタンスの再起動や共有プールからのAgeOutを考慮する必要がある

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 32: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 32

11gからの新機能

新機能を理解する

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

<Insert Picture Here>

Page 33: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

機能概要

33

• CBO自身が実行計画を時間経過とともに履歴として記録し、評価する管理メカニズム

• 複数の実行計画からSQL計画ベースラインを構築し、その中から最適な実行計画を選択可能• Proactive な、未然防止メカニズム

• SPMの3つのフェーズ

取得

選択

改良

1. 取得

実行計画を取得し、SQL計画履歴として記録する

既存の実行計画からのSQL計画ベースラインを作成する

2. 選択

格納されたSQL計画履歴に基づいて、パフォーマンスが低下する可能性を回避する実行計画を選択する

3. 改良

新しい実行計画のパフォーマンスを評価し、より優れたパフォーマンスの実行計画をSQL計画ベースラインに組み込む

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 34: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

SQL計画履歴の取得

34

• CBOは新しい実行計画が発行されるごとに実行計画を取得し、SQL計画履歴に格納して管理する

• ただし、SQL計画履歴への格納対象は、再解析/再実行されたSQLである(1回解析済みのSQLのSQL_IDをログに格納して認識している)

• 繰り返し実行されたSQL文の新しい実行計画が取得される

SQL管理ベース(SMB)

SQL計画履歴

SQL計画ベースライン

SYS_SQL_PLAN_1

• SQL管理ベース(SMB)

SQL計画履歴、およびSQL計画ベースラインが格納される領域(SYSAUX表領域)

SYSAUX表領域の10%のサイズが確保される(DBMS_SPM.CONFIGUREプロシージャでサイズ変更可能)

• SQL計画履歴

SQL文に対して生成された承認済みおよび未承認の計画履歴

• SQL計画ベースライン

各SQLごとの最初に取得された計画履歴

承認済みの計画履歴(未承認の実行計画は入らない)

[計画履歴]

SQLテキスト

アウトライン

バインド変数

実行計画

・・・

optimizer_capture_sql_plan_baseline = true

CBO

実行計画A

実行計画AでSQL実行

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 35: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

SQL計画ベースラインの選択

35

• 実行計画はSQL計画ベースラインの中に入ったものしか使いません• SQL計画履歴の中の未承認のものは使わない

• ソフトパース時はSPMの機能は利用されません

SQL管理ベース(SMB)

SQL計画履歴

SQL計画ベースライン

SYS_SQL_PLAN_1

SYS_SQL_PLAN_2

実行計画B

CBO

SQL計画ベースライン上の実行計画と一致

実行計画BでSQL実行

実行計画AでSQL実行

SQL計画ベースライン上の実行計画と一致しない

SQL計画ベースライン

各SQLごとの最初に取得された計画履歴

承認済みの計画履歴

SQL計画履歴(未承認)

各SQLごとの2番目以降に取得され、かつ承認されていない計画履歴

optimizer_use_sql_plan_baseline = true

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 36: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

SQL計画ベースラインの改良

36

• 新しい実行計画のパフォーマンスを評価し、より優れた実行計画をSQL計画ベースラインに組み込む

• 計画ベースラインの改良には、以下の方法等が存在する

SQL管理ベース(SMB)

SQL計画履歴

SQL計画ベースライン

SYS_SQL_PLAN_1

SYS_SQL_PLAN_2

SQL計画ベースライン

各SQLごとの最初に取得された計画履歴

承認済みの計画履歴

SQL計画履歴(未承認)

各SQLごとの2番目以降に取得され、かつ承認されていない計画履歴

SYS_SQL_PLAN_2

手動による計画のロード(SQLチ

ューニング・セット、もしくはカーソル・キャッシュの使用)

CBOによる自動ロード(DBMS_SPM.EVOLVE_SQL_

PLAN_BASELINEファンクションの使用)

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 37: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

レスポンスのコントロール

37

• 実行計画が変動しやすい環境においては、実行計画の変動によりSQLのレスポンスが安定しないことが問題• SPMを用いることで、SQLレスポンスに直結する実行計画を確認し、承認された実行計画

のみを使用することで、SQLレスポンスをコントロールすることが可能

レスポンス

実行計画が変化レスポンスも変化

レスポンス

実行計画が変化

SQL実行に使用される実行計画が変化しないため、レスポンスは急激変化しないSPM

従来

SPMを使用SPMを使用する実行計画は変化しない

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 38: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

メリットと考慮事項

38

• 実行計画の変動リスクに対応可能

• 複数の実行計画を保存し比較することで、最適な実行計画を選択可能

• 実行計画の管理性が向上する

メリット

考慮事項

• ハードパース時の負荷増

• 実行計画履歴を格納するための領域が必要

• 複数の実行計画の中から最適な実行計画を選択することが必要

• 新しい実行計画を承認して利用するタイミングは次のハードパース時

Adaptive Cursor Sharing

Cardinality Feedback

SQL Plan Management

Page 39: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 39

新しいチューニング&運用アプローチ

統計情報を運用管理する + SPMを利用する

新しいチューニング&運用アプローチ

<Insert Picture Here>

Page 40: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

統計情報収集リスクの許容

40

• SPMを用いることで、統計情報の管理と実行計画の管理を切り離すことが可能• 実行計画やレスポンスへの影響を意識することがなく、今までより安全に統計情報の管理

を実施することが可能

実データ

SQLテキスト

レスポンスパラメータ

オブジェクト構造

環境

実行計画

統計情報

Cost Base Optimizer

SPMによって、実行計画が管理されているため、自動的に実行計画が変動する事は無い

統計情報を再収集

SPM

Page 41: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

統計情報管理の重要性

41

• SPMは実行計画を最適化する機能ではないため、実行計画はCBOのインプット情報に依存します

• SPMを使って実行計画を管理したとしても、生成されている実行計画が最適ではない場合は当然データへのアクセス効率も悪くなります• SPMを使用している環境においても、適切な統計情報管理を行ない、質の高い統計情報

を取得することが重要かつ大前提!

実行計画A

CBO

質の悪い統計情報を使用

実行計画B

実行計画C

最適でない実行計画が貯め込まれてしまう

Page 42: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 42

新しいチューニング&運用アプローチ

統計情報を運用管理する + SPMを利用する

新しいチューニング&運用アプローチ

<Insert Picture Here>

Page 43: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

新しいチューニング&運用アプローチ

43

1. バインド変数化の促進

2. 統計情報の管理

実データ

SQLテキスト

レスポンスパラメータ

オブジェクト構造

環境

実行計画

統計情報

Cost Base Optimizer

Cardinality Feedback

Adaptive Cursor Sharing

SQL Plan Management

3. 新機能の理解

• Cardinality Feedback

• Adaptive Cursor Sharing

• SQL Plan Management

ポイント

Page 44: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 44

http://blogs.oracle.com/oracle4engineer/entry/otn_ondemand_questionnaire

OTNオンデマンド 感想

OTNセミナーオンデマンド

コンテンツに対するご意見・ご感想を是非お寄せください。

上記に簡単なアンケート入力フォームをご用意しております。

セミナー講師/資料作成者にフィードバックし、コンテンツのより一層の改善に役立てさせていただきます。

是非ご協力をよろしくお願いいたします。

Page 45: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

OTNセミナーオンデマンド日本オラクルのエンジニアが作成したセミナー資料・動画ダウンロードサイト

掲載コンテンツカテゴリ(一部抜粋)

Database 基礎

Database 現場テクニック

Database スペシャリストが語る

Java

WebLogic Server/アプリケーション・グリッド

EPM/BI 技術情報

サーバー

ストレージ

例えばこんな使い方• 製品概要を効率的につかむ

• 基礎を体系的に学ぶ/学ばせる

• 時間や場所を選ばず(オンデマンド)に受講

• スマートフォンで通勤中にも受講可能

100以上のコンテンツをログイン不要でダウンロードし放題

データベースからハードウェアまで充実のラインナップ

毎月、旬なトピックの新作コンテンツが続々登場

45

OTNオンデマンド

コンテンツ一覧 はこちらhttp://www.oracle.com/technetwork/jp/ondemand/index.html

新作&おすすめコンテンツ情報 はこちらhttp://oracletech.jp/seminar/recommended/000073.html毎月チェック!

Page 46: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

オラクルエンジニア通信オラクル製品に関わるエンジニアの方のための技術情報サイト

46

オラクルエンジニア通信

技術コラム

アクセスランキング

特集テーマPick UP

技術資料

性能管理やチューニングなど月間テーマを掘り下げて詳細にご説明

インストールガイド・設定チュートリアルetc. 欲しい資料への最短ルート

他のエンジニアは何を見ているのか?人気資料のランキングは毎月更新

SQLスクリプト、索引メンテナンスetc. 当たり前の運用/機能が見違える!?

http://blogs.oracle.com/oracle4engineer/

Page 47: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

oracletech.jpITエンジニアの皆様に向けて旬な情報を楽しくお届け

47

oracletech

Viva!Developer

セミナー

スキルアップ

製品/技術情報

ORACLE MASTER!試験頻出分野の模擬問題と解説を好評連載中

Oracle Databaseっていくら?オプション機能も見積れる簡単ツールが大活躍

基礎から最新技術までお勧めセミナーで自分にあった学習方法が見つかる

全国で活躍しているエンジニアにスポットライト。きらりと輝くスキルと視点を盗もう

http://oracletech.jp/

Page 48: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 48

あなたにいちばん近いオラクル

Oracle Directまずはお問合せください

Web問い合わせフォーム フリーダイヤル

0120-155-096

※月曜~金曜9:00~12:00、13:00~18:00(祝日および年末年始除く)

専用お問い合わせフォームにてご相談内容を承ります。http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

※フォームの入力にはログインが必要となります。※こちらから詳細確認のお電話を差し上げる場合がありますので

ご登録の連絡先が最新のものになっているかご確認下さい。

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。ステム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

Oracle Direct

Page 49: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved.

Page 50: オラクルコンサルが語る 新しいチューニング&運用アプローチ...•SQL文はバインド変数化する •統計情報を運用管理する •今までのチューニング&運用アプローチの課題

Copyright© 2011, Oracle. All rights reserved. 50