19c新機能 ~ Oracle Cloud Days [最新動向]

8/6,7に新高輪で開催されたOracle Modern Cloud Day Tokyoの1日目に参加し、19cの新機能についての話を聞いてきた。内容は概ね以下のスライド通り。3点ほど気になった点があったので以下にメモしておく。

2019/4/22 TechNight資料

1点目。プレゼンを聞いていてリアルタイム統計がデフォルト有効、かつ、無効化するにはヒント(NO_GATHER_OPTIMIZER_STATISTICS)を使うという話があった。しかし現実問題、更改案件では無効化するために全てのSQLにヒントを入れることは不可能なので、この話は受け入れがたい。性能負荷はわずかである(minやmax、num_rowsといった最小限の統計のみ取得する)といいつつも、負荷もさることながら、統計変動による実行計画変動を避けたい、というニーズは変わらず存在するからだ。

実際、以下の初期化パラメータを設定(FALSE)することで無効化できる。隠しパラメータなので、おそらく積極的に設定されないよう、あまり公にしたくないという意図が感じられた。

"_optimizer_use_stats_on_conventional_dml" ・・・リアルタイム統計を使用するか制御するパラメータ
"_optimizer_gather_stats_on_conventional_dml" ・・・ リアルタイム統計を収集するか制御するパラメータ

また、12cからのダイレクトインサート時(CreateTableAsSelectやInsertAsSelect)の統計収集機能もある。これもヒントで制御できるが以下の初期化パラメータで無効化できる(デフォルト有効化)。

"_optimizer_gather_stats_on_load"

経験上、これは取得にそれなりの負荷がかかるので、意識してインサート時に統計取得したい!、という場合の除いて無効化しておくことが良いだろう。DWHの一時表など、そもそも取得の必要がない、あるいは統計ロック等で変動を抑える対処を検討済みのシステムを更改する場合などではなおさらである。

2点目。19cの高頻度自動オプティマイザ統計収集は、15分間隔でstaleになったテーブルの統計を取得する機能であるが、これが実装されたのは興味深い。以前、同様な機能を作りこもうとしている人をOracleコミュニティで見たことがあったからだ。DWHでロードするタイミングが複雑で、適切な統計取得のウィンドウを1つに決められないケースだったと記憶している。デフォルトオフなので、あまり気にすることはないが、何かに役立つかもしれないので覚えておきたい。

3点目。上記プレゼンの中で、自動インデックスのデモがあった。単純なフルスキャンの実行計画が自動インデックスにより1秒以下にチューニングされたというもの。正直、これだけでは商用でまともに使える感触までは得られなかったが、AUTO_INDEX_MODE=report onlyでレポートだけ作成してくれる機能があるので、例えば開発環境でバッチを一通り流してどのような自動インデックスが作成されるか見るという使い方はできるかもしれない(ただ、それならSQLアドバイザとかを使えばよいだけかもしれないが)。感覚的にはインデックス作成によるチューニングは入念な試験を経て初めて商用リリースできると思っているので、15分間隔のサイクルで自動で新たなインデックスが有効化される、という世界観がどれだけ受け入れられるのか、今後の動向を注視したい。

以上
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。