Oracle Database SQLチューニング・ガイドのこのリリースでの変更
ここでは、Oracle Database SQLチューニング・ガイドにおける最も重要な変更点について説明します。
「はじめに」の内容は次のとおりです。
Oracle Database 18cリリース18.1での変更点
Oracle Database 18cリリース18.1のOracle Database SQLチューニング・ガイドには、次の変更があります。
新機能
このリリースの新機能は次のとおりです。
-
プライベート一時表
プライベート一時表は、トランザクションまたはセッションの終了時に自動的に削除される一時データベース・オブジェクトです。プライベート一時表はメモリーに格納され、それを作成したセッションにのみ表示されます。プライベート一時表は、一時表の有効範囲をセッションまたはトランザクションに制限するため、アプリケーション・コードの柔軟性が高くなり、コードのメンテナンスが容易になって、すぐに使用できる機能も向上します。
「グローバル一時表のセッション固有統計」を参照してください。
-
上位N個近似問合せ処理
従来の問合せよりも高速に「上位n」の問合せ結果を取得するには、
APPROX_RANK
でAPPROX_SUM
およびAPPROX_COUNT
のSQL関数を使用します。近似問合せ処理についてを参照してください。
-
Oracle Exadata Database MachineのSQLチューニング・アドバイザの機能拡張
SQLチューニング・アドバイザは、Exadata対応SQLプロファイルを推奨できます。Oracle Exadata Database Machineでは、スマート・スキャンのコストは、システム統計I/Oシーク時間(
ioseektim
)、マルチブロック読取りカウント(mbrc
)およびI/O転送速度(iotfrspeed
)によって異なります。これらの統計の値は、通常はExadataで異なるため、計画の選択に影響を与えることがあります。システム統計が失効している場合や、統計を収集するとパフォーマンスが向上する場合、SQLチューニング・アドバイザは、Exadata対応SQLプロファイルを受け入れることを推奨します。統計分析とSQLプロファイルの統計を参照してください。
-
SQLチューニング・セットを管理するための新しいパッケージ
SQLチューニング・セットの他の操作すべてを作成、変更、削除および実行する際に、
DBMS_SQLTUNE
のかわりにDBMS_SQLSET
を使用できます。SQLチューニング・セットへのコマンドライン・インタフェースを参照してください。
-
スケーラブルな順序
順序値をキーとして使用する表にデータをロードするときは、スケーラブルな順序を使用すると索引リーフ・ブロック競合が緩和されます。
-
パフォーマンス・フィードバックから
OPTIMIZER_ADAPTIVE_STATISTICS
を分離以前のリリースと異なり、
OPTIMIZER_ADAPTIVE_STATISTICS
初期化パラメータをTRUE
またはFALSE
に設定して、パフォーマンス・フィードバックには影響しなくなりました。
Oracle Database 12cリリース2 (12.2.0.1)での変更点
Oracle Database 12cリリース2 (12.2.0.1)のOracle Database SQLチューニング・ガイドには、次の変更があります。
新機能
このリリースの新機能は次のとおりです。
-
アドバイザの拡張機能
-
オプティマイザ統計アドバイザ
オプティマイザ統計アドバイザは、統計および統計関連タスクの品質を分析する組込みの診断ソフトウェアです。アドバイザ・タスクがメンテナンス・ウィンドウで自動的に実行されますが、必要に応じて実行することもできます。次に、アドバイザ・レポートを表示できます。アドバイザが推奨事項を生成すると、システム生成スクリプトを実行して実装できる場合があります。
オプティマイザ統計アドバイザを使用した統計の分析を参照してください。
-
Active Data GuardでのSQLチューニング・アドバイザのサポート
データベースのリンクを使用すると、プライマリ・データベースのスタンバイ・ワークロードをチューニングできます。
ローカルおよびリモートSQLチューニングを参照してください。
-
-
DBMS_STATS
の拡張機能-
自動列グループ統計の
DBMS_STATS
プリファレンスDBMS_STATS
プリファレンスのAUTO_STAT_EXTENSIONS
がON
(デフォルトではOFF
)に設定されている場合、SQL計画ディレクティブでは、ワークロードの述語の使用に基づいて、列グループ統計の作成を自動的に発生させることができます。オプティマイザ統計プリファレンスの目的を参照してください。
-
外部表スキャン速度およびインメモリー列ストア(IM列ストア)統計の
DBMS_STATS
サポートデータベースがIM列ストアを使用する場合、
im_imcu_count
を表またはパーティションのIMCUの数、im_block_count
を表またはパーティションのブロックの数に設定できます。外部表の場合、scanrate
は、データがMB/秒でスキャンされる速度を指定します。外部表のガイドラインを参照してください。
-
DBMS_STATS
統計プリファレンスPREFERENCE_OVERRIDES_PARAMETER
PREFERENCE_OVERRIDES_PARAMETER
統計プリファレンスは、オプティマイザ統計の収集時に統計プリファレンスを使用してパラメータの入力値をオーバーライドするかどうかを決定します。これにより、データベースが統計収集プロシージャに渡されたパラメータ値に従う時期を制御します。統計プリファレンスのオーバーライドを参照してください。
-
現在の統計のアクセスに
FLUSH_DATABASE_MONITORING_INFO
は必要ありませんDBMS_STATS.FLUSH_DATABASE_MONITORING_INFO
を使用して監視情報をディスクに保存することにより、ビュー・メタデータが最新であることを確認する必要はもうありません。DBA_TAB_STATISTICS
およびDBA_IND_STATISTICS
に示される統計は、DBA_TAB_MODIFICATIONS
と同じソースから取り込まれます。これは、これらのビューがディスクおよびメモリーから取得した統計を示すことを意味します。オプティマイザ統計が失効するタイミングの判別を参照してください。
-
-
適応計画および適応統計の個別制御
OPTIMIZER_ADAPTIVE_PLANS
初期化パラメータは、適応計画を有効化(デフォルト)または無効化します。OPTIMIZER_ADAPTIVE_STATISTICS
初期化パラメータにより、適応統計を有効化(デフォルト)または無効化します。適応問合せ計画の有効化のタイミングおよび適応統計の有効化のタイミングを参照してください。
-
結合の拡張機能
-
結合グループ
結合グループは、効果的に結合できる2つの列をリストするユーザー作成オブジェクトです。特定の問合せで、結合グループにより、データベースで列値を解凍およびハッシュするパフォーマンス上のオーバーヘッドを排除できます。結合グループにはIM列ストアが必要です。
インメモリー結合グループを参照してください。
-
バンド結合の拡張機能
バンド結合は、データ・セットのキー値が2番目のデータ・セットの指定された範囲(「バンド」)に収まる必要がある特殊なタイプの非等価結合です。データベースによりバンド結合が検出されると、データベースはより効率的にバンド結合のコストを評価し、定義されたバンドの範囲から外れる行の不要なスキャンを回避します。ほとんどの場合、最適化されたパフォーマンスは、等価結合に相当します。
「バンド結合」を参照してください。
-
-
カーソル管理の拡張機能
-
cursor-duration一時表
問合せの中間結果をマテリアライズするため、Oracle Databaseでは、問合せのコンパイル中にメモリーでcursor-duration一時表を作成する場合があります。
WITH
句問合せやスター型変換などの複合操作の場合、この内部最適化が、繰返し使用された副問合せからの中間結果のマテリアライズを拡張し、パフォーマンスを改善してI/Oを最適化します。cursor-duration一時表を参照してください。
-
高度なカーソルの無効化
このリリースから、DDL文に遅延した無効化を指定できます。共有SQL領域がローリング無効とマークされている場合、データベースは個別にランダムに生成された期間を割り当てます。期限切れになった後に問合せを実行する場合のみ、ハード解析が発生します。これにより、データベースでは、一定期間のハード解析のパフォーマンス上のオーバーヘッドを分散できます。
「共有カーソルのライフサイクルについて」を参照してください。
-
-
OR
拡張の拡張以前のリリースでは、オプティマイザは
CONCATENATION
演算子を使用してOR
拡張を実行しました。オプティマイザは、かわりにUNION-ALL
演算子を使用するようになりました。この拡張では、様々な変換の間の対話、および問合せ構造の共有回避を含めていくつかの利点が提供されます。「OR拡張」を参照してください。
-
SQL計画管理の拡張機能
-
AWRから計画を取得できるようになりました。計画の手動取得を参照してください。
-
以前のリリースでは、すべての繰返し問合せに自動取得が適用されました。このリリースから、フィルタを作成して、選択した文の計画のみを取得できます。初期計画の自動取得の対象を参照してください。
-
-
リアルタイム・データベース操作監視の拡張機能
セッションは、異なるセッションのデータベース操作をそのセッションIDおよびシリアル番号を指定することで開始または終了できます。
「複合データベース操作の定義」を参照してください。
-
式追跡
一般に、SQL文にはプラス(
+
)またはマイナス(-
)などの式が含まれます。より複雑な例として、LTRIM
およびTO_NUMBER
などのPL/SQLファンクションやSQLファンクションがあります。式の統計ストア(ESS)は、コンパイル中に識別される式および実行中に取得される式に関する使用方法情報を維持します。式の統計ストア(ESS)についてを参照してください。
-
マルチテナント環境のアプリケーションのトレースに対する拡張機能
CDB管理者およびPDB管理者は、新しい
V$
ビューを使用して特定のPDBに関連するトレース・データにアクセスできます。マルチテナント環境のエンドツーエンド・アプリケーションのトレースを参照してください。
サポート対象外機能
次の機能は、Oracle Database 12cリリース2 (12.2.0.1)ではサポートが終了しました。
-
OPTIMIZER_ADAPTIVE_FEATURES
初期化パラメータ
関連項目:
サポート対象外機能のリストは、Oracle Databaseアップグレード・ガイドを参照してください
その他の変更
このトピックでは、このリリースにおけるその他の変更点について説明します。
-
新しいReal-World Performanceの内容
このリリースでは、Real-World Performanceグループが提供する情報が組み込まれ、次を含みます。
-
「カーソル共有によるReal-World Performanceの改善」では、適応カーソル共有などのバインド変数および新機能を使用する方法について説明します
-
Oracle Database 12cリリース1 (12.1.0.2)での変更点
Oracle Database 12cリリース1 (12.1.0.2)のOracle Database SQLチューニング・ガイドには、次の変更があります。
新機能
このリリースの新機能は次のとおりです。
-
インメモリー集計
この最適化により、スター・スキーマなどで、単一の大きな表を複数の小さな表に結合する際に各行に必要な結合および
GROUP BY
処理が最小限に抑えられます。VECTOR
GROUP BY
集計では、パラレル問合せ(PQ)処理に関連するインフラストラクチャを使用し、それをCPU効率のよいアルゴリズムと組み合せて、ファクト・データの再分散前に実行される初期集計のパフォーマンスと効果を最大化します。インメモリー集計(VECTOR GROUP BY)を参照してください。
-
適応問合せ計画のSQLモニター・サポート
SQLモニターでは適応問合せ計画が次のようにサポートされます。
-
問合せ計画が適応かどうかを示し、その現在のステータス(解決中または解決済)を表示します。
-
現在の問合せ計画、完全問合せ計画または最終問合せ計画を選択できるリストを提供します。
適応問合せ計画についてさらに学習するには、「適応問合せ計画」を、SQL監視についてさらに学習するには、「Cloud Controlを使用したSQL実行の監視」を参照してください。
-
Oracle Database 12cリリース1 (12.1.0.1)での変更点
Oracle Database 12cリリース1 (12.1)のOracle Database SQLチューニング・ガイドには、次の変更があります。
新機能
このリリースの新機能は次のとおりです。
-
適応SQL計画管理(SPM)
SPM展開アドバイザは、展開タスクのスケジュール、展開タスクの再実行および持続的なレポートの生成を可能にするタスク・インフラストラクチャです。新しい自動展開タスク
SYS_AUTO_SPM_EVOLVE_TASK
が、デフォルトのメンテナンス・ウィンドウに実行されます。このタスクは、承認されていないすべての計画をランク付けし、それらの展開プロセスを実行します。新しい計画のほうが既存の計画よりもパフォーマンスが高いとわかった場合、タスクは自動的にその計画を承認します。DBMS_SPM
パッケージを使用して、手動で展開タスクを実行することもできます。「SPM展開アドバイザのタスクの管理」を参照してください。
-
適応問合せ最適化
適応問合せ最適化は、オプティマイザが、実行計画に対する実行時の調整を行い、より優れた統計を導くための追加情報を検出できるようにするための一連の機能です。それには、次のような機能が含まれます。
-
適応問合せ計画
適応問合せ計画に用意されている組込みオプションを使用すると、文に対してデフォルトの計画とは異なる最終計画を使用できます。最初の実行時、特定のサブプランがアクティブになる前に、オプティマイザは、どのオプションを使用するかについて最終的な決定を行います。オプティマイザの選択は、この時点までの実行中に行われた監視に基づいています。オプティマイザが計画を適応することにより、問合せのパフォーマンスを向上させることができます。
「適応問合せ計画」を参照してください。
-
自動再最適化
自動再最適化を使用すると、オプティマイザは、問合せの初期実行を監視します。実際の実行統計が元の計画統計と大きく異なる場合、オプティマイザは、実行統計を記録し、次回その文が実行されるときにその実行統計を使用してより最適な計画を選択します。データベースでは、自動再最適化で取得された情報を使用して、自動的にSQL計画ディレクティブが生成されます。
「自動再最適化」を参照してください。
-
SQL計画ディレクティブ
Oracle Database 12cより前のリリースの場合、データベースでは、コンパイルおよび実行に関する統計は、非永続の共有SQL領域に格納されていました。このリリースから、データベースでは、SQL計画ディレクティブを使用できるようになりました。SQL計画ディレクティブは、オプティマイザがより最適な計画の生成に使用できる追加の情報および命令です。データベースでは、SQL計画ディレクティブが
SYSAUX
表領域に永続的に格納されます。実行計画を生成する際、オプティマイザは、SQL計画ディレクティブを使用して、計画でアクセスするオブジェクトに関する詳細情報を取得できます。「SQL計画ディレクティブ」を参照してください。
-
動的統計の拡張
Oracle Database 12cより前のリリースでは、動的統計(以前は動的サンプリングと呼ばれていました)は、問合せ内の1つ以上の表にオプティマイザ統計が存在しない場合にのみ使用されました。このリリースから、オプティマイザは、動的統計が有用であるかどうか、およびすべてのSQL文に対して使用する動的統計レベルを自動的に決定するようになりました。動的統計で収集された情報は、永続的であり、他の問合せで使用できます。
「補足的な動的統計」を参照してください。
-
-
新しいタイプのヒストグラム
このリリースでは、上位頻度ヒストグラムおよびハイブリッド・ヒストグラムが導入されています。列に254を超える個別値があり、かつ上位254の最頻出値の占める割合がデータの99%を超える場合は、上位254の最頻出値を使用して上位頻度ヒストグラムが作成されます。統計的には重要でない非ポピュラー値を無視することによって、データベースでは、頻繁に出現する値に関するより高品質なヒストグラムを作成できます。ハイブリッド・ヒストグラムは、拡張された高さ調整済ヒストグラムです。このヒストグラムでは、各エンドポイントの正確な頻度がサンプルに格納され、値が複数のバケットに格納されることはありません。
また、通常の頻度ヒストグラムも拡張されています。オプティマイザは、NDVの計算時に、小規模なサンプルではなくデータの全体スキャンに基づいて頻度ヒストグラムを計算します(
AUTO_SAMPLING
使用時)。拡張された頻度ヒストグラムでは、非常に頻度の低い値でも正確なバケット・カウントによってヒストグラム内で適切に表されます。「ヒストグラム」を参照してください。
-
データベース操作の監視
リアルタイムなデータベース操作の監視によって、長時間実行されるデータベース・タスク(バッチ・ジョブ、スケジューラ・ジョブ、データ抽出、変換およびロード(ETL)ジョブなど)の監視が可能になります。この機能は、監視対象のビジネス・オペレーションに関連付けられたSQLおよびPL/SQLの問合せの進行状況を追跡します。DBAまたは開発者は、オペレーションの開始と終了を明確に指定するか、またはオペレーションを識別するタグで暗黙的に指定することにより、監視用のビジネス・オペレーションを定義できます。
「データベース操作の監視」を参照してください。
-
同時統計収集
複数の表、表パーティションまたは表サブパーティションでオプティマイザ統計を同時に収集できます。マルチプロセッサ環境をフルに活用することで、データベースでは、統計の収集に必要な全体時間を短縮できます。Oracle SchedulerおよびAdvanced Queuingにより、統計を同時に収集するためのジョブが作成および管理されます。スケジューラは、使用可能なシステム・リソースと
JOB_QUEUE_PROCESSES
初期化パラメータの値に基づいて、同時に実行するジョブの数およびキューに入れるジョブの数を決定します。「オプティマイザ統計の同時収集」を参照してください。
-
DBMS_STATS
統計収集関数のレポート作成モードDBMS_STATS
関数をレポート作成モードで実行できます。このモードでは、オプティマイザは、実際には統計を収集せずに、指定された統計収集関数を使用した場合に処理されるオブジェクトをレポートします。「レポート作成モードでの統計収集関数の実行」を参照してください。
-
過去の統計収集操作に関するレポート
DBMS_STATS
関数を使用して、特定の統計収集操作または特定の日時の間に発生した操作のレポートを作成できます。「過去の統計収集操作のレポート作成」を参照してください。
-
列グループの自動作成
列グループの統計を使用すると、データベースでは、列のグループ(1つの単位として扱われます)に関するオプティマイザ統計が収集されます。Oracle Database 12cから、データベースは自動的に、指定のワークロードまたはSQLチューニング・セットで必要な列グループを判断し、それらの列グループを作成するようになりました。そのため、指定のどのワークロードについても、各表のどの列をグループ化する必要があるのかを知る必要はありません。
「特定のワークロードに対して有用な列グループの検出」を参照してください。
-
グローバル一時表のセッション固有統計
このリリースから、グローバル一時表に、各セッションの異なるオプティマイザ統計セットが含まれるようになりました。セッション固有の統計により、ユーザーは、各セッションでグローバル一時表の統計を設定したり、動的統計を使用したりする必要がなくなるため、一時表のパフォーマンスと管理性が向上します。グローバル一時表に対するカーディナリティ見積りのエラーの可能性は低くなり、最適な実行計画の決定に必要な情報がオプティマイザに確実に存在するようになります。
「一時表の統計」を参照してください。
-
SQLテスト・ケース・ビルダーの拡張
SQLテスト・ケース・ビルダーにより、特定の動的および変動要因に依存するインシデントの診断を可能にするアクションおよびイベントを捕捉して再現できます。この機能は特に、パラレル問合せおよび自動メモリー管理に役に立ちます。
「SQLテスト・ケース・ビルダーを使用した診断データの収集」を参照してください。
-
バルク・ロードのためのオンライン統計収集
バルク・ロードとは、
CREATE TABLE AS SELECT
またはINSERT INTO ... SELECT
操作です。Oracle Database 12cより前のリリースでは、失効した統計によって実行計画が最適なものとならない可能性を避けるため、バルク・ロードの後に手動で統計を収集する必要がありました。このリリースから、Oracle Databaseでは、オプティマイザ統計が自動的に収集されるようになりました。それにより、パフォーマンスと管理性の両方が向上します。「バルク・ロードのためのオンライン統計収集」を参照してください。
-
パーティション・メンテナンス操作後にシノプシスを再利用します。
ALTER TABLE EXCHANGE
は共通のパーティション・メンテナンス操作です。パーティションの交換時に、パーティションおよび表の統計も交換されます。シノプシスとは、INCREMENTAL
値がtrue
に設定されている場合に、パーティション表で収集される一連の補助統計です。Oracle Database 12cより前のリリースでは、表にある表レベルのシノプシスは収集できませんでした。これにより、表にある表レベルのシノプシスの収集、表とパーティションの交換およびパーティションのシノプシスによる終了ができませんでした。増分モードでオプティマイザ統計を明示的に収集して、欠落しているシノプシスを作成する必要がありました。このリリースからは、表にある表レベルのシノプシスを収集できます。この表を、増分モードの表内のパーティションと交換する場合は、シノプシスも交換されます。「パーティション・メンテナンス操作の増分統計の維持」を参照してください。
-
失効したまたはロックされたパーティション統計のある表に対するグローバル統計の自動更新
増分統計では、パーティションまたはサブパーティション統計が失効したりロックされている場合でも、パーティション表のグローバル統計を自動的に計算できます。
「失効したまたはロックされたパーティション統計のある表の増分統計の維持」を参照してください。
-
キューブ問合せのパフォーマンスの向上
この向上により、CPUおよびメモリーの消費が最小化され、キューブに対する問合せのI/Oが削減されます。
CUBE JOIN
操作について学習するには、表7-7を参照してください。
非推奨となった機能
次の機能は今回のリリースで非推奨となり、今後のリリースではサポートされない可能性があります。
-
ストアド・アウトライン
代替機能の詳細は、SQL計画ベースラインの管理を参照してください。
-
CURSOR_SHARING
初期化パラメータのSIMILAR
値この値は非推奨です。かわりに、
FORCE
を使用してください。CURSOR_SHARING = FORCEを永続的な修正として使用しないを参照してください。
サポート対象外機能
このドキュメントで以前説明されていたいくつかの機能は、Oracle Database 12cではサポートされていません。
サポートされない機能のリストは、『Oracle Databaseアップグレード・ガイド』を参照してください。