[Database] Optimizer Adaptive Features in the Exadata Express Cloud Service

原文はこちら。
https://blogs.oracle.com/optimizer/entry/optimizer_adaptive_features_in_the

Introduction

Exadata Express Cloud Service (Oracle Database 12c Release 2) では、オプティマイザのアダプティブ機能を管理・制御できるように変更されました。このエントリでは、変更点と利用すべき設定の選択方法をご紹介します。

What’s Changed

Oracle Database 12c Release 1では、データベースのパラメータ optimizer_adaptive_features で、アダプティブ機能の全てを以下のように管理・制御しています。


Oracle Database 12c Release 2では、このパラメータが廃止され、新たな2個のパラメータに置き換わりました。下図のように、Adaptive Plan(適応計画)とAdaptive Statistics(適応統計)を別々に管理・制御します。


What are the Optimizer Adaptive Features?

適応計画と適応統計は、数多くあるオプティマイザ機能の包括的な用語です。

デフォルトで有効化されている機能
optimizer_adaptive_plans
(デフォルト:
 TRUE)
Description
ネステッド・ループ/ハッシュ結合の選択 オプティマイザがクエリ実行時にネステッド・ループかハッシュ結合を選択する
適応的なパラレル配分方法 パラレル配分方法を実行時に決定する
スター型変換ビットマップ・プルーニング 見積よりも選択性が非常に悪い場合、実行時にビットマップ・インデックスをSQL実行計画から削除する

デフォルトで無効化されている機能
optimizer_adaptive_statistics(デフォルト:FALSE)
Description
SQL計画ディレクティブ SQL計画ディレクティブを作成し、SQL実行計画に適用する
結合のための統計フィードバック 表結合からのカーディなりティを使ってSQL実行計画を改善する
パフォーマンス・フィードバック PARALLEL_DEGREE_POLICY を ADAPTIVE に設定した場合、選択された並列度を改善する
並列実行のための適応的な動的サンプリング 動的統計を特定の並列クエリのために収集し、カーディなりティの見積を改善する。サンプルサイズは自動的に決定される。

SQL Plan Directives

optimizer_adaptive_statistics をFALSEに設定すると、SQLプラン・ディレクティブの作成は無効にはなりませんが、その代わりにSQL実行計画に影響を与える動的統計に関連して利用されないようにします。

Statistics Feedback

optimizer_adaptive_statistics を FALSE に設定すると、結合のためのOracle Database 12c の統計フィードバックが無効化されます。単一表カーディなりティのための統計フィードバック(カーディナリティ・フィードバックとしてOracle Database 11gで導入されました)は常に有効であることにご注意ください。

Adaptive Dynamic Sampling

optimizer_adaptive_statistics を TRUE に設定すると、optimizer_dynamic_sampling がデフォルト値の2の場合、適応サンプルサイズを使う動的統計はある並列クエリを呼び出します。
Oracle® Databaseリファレンス 12cリリース1 (12.1)
OPTIMIZER_DYNAMIC_SAMPLING
http://docs.oracle.com/cd/E57425_01/121/REFRN/GUID-43655FC3-3C32-486B-8B11-8C20C152618D.htm
Oracle® Database Reference 12c Release 1 (12.1)
OPTIMIZER_DYNAMIC_SAMPLING
https://docs.oracle.com/database/121/REFRN/GUID-43655FC3-3C32-486B-8B11-8C20C152618D.htm#REFRN10140
optimizer_adaptive_statistics を FALSE に設定すると、並列クエリによって適応的な動的サンプリングは開始されません。

Changes to Auto Creation of Column Group Statistics

Oracle Database 12c Release 1では、SQL計画ディレクティブ(SQL Plan Directives)は、統計を収集する際に列グループ統計を呼び出します。以下のようなクエリを使って、自動的に作成された拡張統計を確認することができます。
select owner, table_name, extension, extension_name 
  from dba_stat_extensions 
 where creator = 'SYSTEM' 
 order by owner, table_name, extension_name;
DBAがこの機能を管理・制御できるようにしたいとのフィードバックをもらったので、Oracle Database 12c Release 2では、自動列グループ統計の作成は DBMS_STATSのプリファレンスAUTO_STAT_EXTENSIONSによって制御されます。デフォルトでは、プリファレンスはOFFであり、拡張統計は自動的には作成されません。この機能を再度有効化するには、以下のプロシージャを発行します。
EXEC DBMS_STATS.SET_GLOBAL_PREFS('AUTO_STAT_EXTENSIONS','ON')

Choosing What Settings to Use

デフォルトは幅広いワークロードに対して最適な設定が選択されていますので、ほとんどのシステムではこのデフォルト設定を使うことを推奨します。既にOracle Database 12c Release 1の全ての適応機能を使っており、Exadata Express Cloud Serviceでも同じ設定にしたい場合には、optimizer_adaptive_statistics をTRUEに設定し、プリファレンスAUTO_STAT_EXTENSIONS をONにすることにより、デフォルト値をオーバーライドしてください。

適応計画についてお客様から非常に肯定的なフィードバックをもらっています。非常に幅広いワークロードに対しシステムパフォーマンスを向上させる上でとても有効であることがわかりました。還元すれば、実行時に実行計画を適応することは、あらゆるシステムにとってメリットがありそうです。そのため、optimizer_adaptive_plans のデフォルト値をTRUEに設定することにしました。もちろん、最初から使いたくない場合には、パラメータをFALSEに設定することができます。

適応統計機能はクエリ、データ分布、スキーマが非常に複雑な環境ではより一層有用です。クエリ実行時間がより長くなるこのようなシステムでは、オプティマイザが時間やリソースを投入して実行計画の全体的な質を改善することは特に理に適っています。このような環境では、 optimizer_adaptive_statistics というパラメータをTRUE に設定することできます。

Conclusion

Oracleはアダプティブ機能を管理・制御するように改善を施しました。もっと情報が欲しい場合には、特に現在Oracle Database 12c Release 1を利用中もしくは12c Release 1にアップグレードしている場合は、以下のエントリをご覧ください。
OOW 2016 Update
https://blogs.oracle.com/optimizer/entry/oow_2016_update 
アダプティブ機能に関する詳細は、Oracle Database 12c Release 1のホワイトペーパーをご覧ください。アップデート版はまもなくリリースされます。
Optimizer with Oracle Database 12c(英語)
http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-optimizer-with-oracledb-12c-1963236.pdf
Oracle Database 12cのオプティマイザ(日本語)
http://www.oracle.com/technetwork/jp/database/bi-datawarehousing/twp-optimizer-with-oracledb-12c-1963236-ja.pdf 

0 件のコメント:

コメントを投稿