専用Exadataインフラストラクチャ上のAutonomous DatabaseのHigh Performance機能

この記事では、Autonomous Database on Dedicated Exadata Infrastructureの主なパフォーマンス・チューニング機能について説明します。

この項では、「お客様」という用語は、特定のタスクの実行を担当する組織内のユーザーを意味するために広く使用されています。アプリケーションDBAの場合もあれば、アプリケーション開発者の場合もあります。

Autonomous Databaseには、データベースのパフォーマンスを自動的に監視、分析および最適化するいくつかの機能があります。Oracle Autonomous DatabaseのSQLチューニングおよびパフォーマンス管理機能の完全なリスト、およびその使用手順については、『Oracle Database SQLチューニング・ガイド』を参照してください。

次に示すAutonomous Databaseの主なパフォーマンス・チューニング機能の幅広い分類を確認できます。

ヒント:

次のイメージでは、さらに探索する機能をクリックできます。



事前定義済データベース・サービス

アプリケーションからデータベースへの接続方法、およびデータベースへのSQLコールのコーディング方法によって、アプリケーションのトランザクション処理およびレポートの操作の全体的なパフォーマンスが決まります。

Autonomous Databaseに接続する場合、アプリケーションのデータベースとの対話のパフォーマンスは、接続先のデータベース・サービスによって異なります。Autonomous Databaseには、データベースへの接続時に使用するデータベース・サービスのセットが複数用意されています。これらの接続サービスは、Autonomous Databasesの事前定義済データベース・サービス名で説明されているように、様々な種類のデータベース操作をサポートするように設計されています。

ヒント:

事前定義済データベース・サービスの主な特性と、これらの特性に基づいて様々なデータベース・サービスのセットを比較する表を確認し、アプリケーションのパフォーマンス要件に適したデータベース・サービスを決定してください。

接続プール

Autonomous Databaseに接続する場合、接続プールを使用して、個々の接続を繰り返し作成および破棄するパフォーマンス・オーバーヘッドを削減できます。これは、アプリケーションのデータベースとの対話のパフォーマンスに大きな影響を与えるもう1つの要因です。

通常、継続的な可用性を提供するようにアプリケーションを設計または拡張する場合にのみ、接続プールの使用を検討します。ただし、ほぼすべてのトランザクション処理アプリケーションで、個々の接続ではなく接続プールを使用することはメリットになりえます。接続プールを使用すると、次のメリットがあります:

  • 新しい接続オブジェクトの作成回数を減らします。
  • 接続オブジェクトの再利用を促進します。
  • 接続の取得プロセスを速めます。
  • 接続の維持に費やされるリソース量を制御します。
  • 接続オブジェクトを手動で管理するために必要なコーディングの労力を削減します。

特殊用途の接続機能

Oracle Net Services (以前の呼称はSQL*Net)には、特定の接続シナリオにおけるパフォーマンスを向上させる様々な接続機能が用意されています。これらの機能については、『Oracle Database Net Services管理者ガイド』で説明されています。
  • コロケーション・タグ付けは、特定のトランザクション処理アプリケーションで役立つ、このような機能の1つです。アプリケーションが同じデータベース・サービスに繰り返し接続する場合、コロケーション・タグ付けを使用すると、そのようなすべての接続を、接続のデータベース側で通常実行されるロード・バランシング処理をバイパスして同じデータベース・インスタンスに転送できます。詳細は、クライアント接続のCOLOCATION_TAGを参照してください。

  • 共有サーバー構成は、Autonomous Databaseが、接続プーリングなしで設計されたレガシー・アプリケーションのメンテナンスをサポートしているもう1つの機能です。共有サーバー・アーキテクチャを使用すると、データベース・サーバーは多数のクライアント・プロセスで非常に少ないサーバー・プロセスを共有することを許可できます。これにより、アプリケーションがサポートできるユーザー数が増えます。このようなレガシー・アプリケーションに共有サーバー・アーキテクチャを使用すると、アプリケーション自体を変更せずにスケール・アップできます。

    Autonomous Container Database (ACD)のプロビジョニング中に共有サーバー接続を有効にできます。この設定は、その中に作成されたすべてのデータベースに適用されます。手順については、Autonomous Container Databaseの作成を参照してください。

    また、セッションの多重化を含む共有サーバーの詳細は、『Oracle Databaseネット・サービス管理者ガイド』を参照してください。

    Autonomous Container Databaseに対して共有サーバー接続を有効にした後は、接続文字列を変更する必要はありません。デフォルトは「Dedicated」に設定されています。

    ノート

    共有サーバー対応のAutonomous Container Databaseの下に作成された特定のAutonomous Databaseに対して共有サーバーを無効にすることはできません。また、共有サーバー対応のAutonomous Container Databaseの下に作成されたAutonomous Databasesに対して専用接続を使用することはできません。

SQLパフォーマンス・チューニング機能

優れたアプリケーションを作成する第一歩は、SQLを適切に記述することです。Oracle Autonomous Databaseには、高パフォーマンス・アプリケーションを構築し、SQLおよびPL/SQLコードを検証するための多数の機能があります。これらの機能の一部を次に示します。

  • 自動索引付け
  • オプティマイザの統計およびヒント
  • SQL計画のパフォーマンス低下の自動解決
  • ランナウェイSQL文の自動隔離
  • SQL計画管理
  • SQLチューニング・セット
  • SQLトレース

アプリケーションを開発する際に、Oracle Databaseアクション(Autonomous Databaseに組み込まれている)とOracle SQL Developer (開発システムにインストールする無料アプリケーション)の両方によって提供されるSQLワークシートを使用して、記述するSQLコードにこれらの機能がどのように影響し、どのようにコードが改善されるか、すぐに学ぶことができます。

SQLトレース

アプリケーション操作に予想以上に時間がかかる場合、解析、実行およびフェッチ・フェーズでそのSQL文に費やされた時間などの詳細とともに、この操作の一部として実行されたすべてのSQL文のトレースを取得すると、パフォーマンス問題の原因を特定して解決するのに役立ちます。Autonomous DatabaseでSQLトレースを使用してこれを実現できます。

Autonomous Databaseでは、SQLトレースはデフォルトで無効になっています。SQLトレース・データの収集を開始するには、これを有効にする必要があります。SQLトレースを有効化および使用する方法の詳細は、Autonomous DatabaseでのSQLトレースの使用を参照してください。

オプティマイザ統計

Autonomous Databaseではオプティマイザ統計が自動的に収集されるため、このタスクを手動で実行する必要はなく、また、統計が常に最新であることを保証できます。自動統計収集はAutonomous Databaseで有効になっており、標準のメンテナンス・ウィンドウで実行されます。

ノート

メンテナンス・ウィンドウの時間と自動オプティマイザ統計収集の詳細は、『Oracle Database管理者ガイド』を参照してください。

オプティマイザ統計の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

オプティマイザ・ヒント

オプティマイザ・ヒントは、オプティマイザに命令を渡すSQL文内の特別なコメントです。オプティマイザは、なんらかの状況により妨害されていないかぎり、ヒントを使用して文の実行計画を選択します。

オプティマイザのAutonomous DatabaseのデフォルトおよびPARALLELヒントは、ワークロードによって異なります:
  • Autonomous Data Warehouse: データ・ウェアハウスを使用するAutonomous Databaseは、デフォルトでSQL文内のオプティマイザ・ヒントおよびPARALLELヒントを無視します。

    アプリケーションがヒントに依存している場合、オプティマイザ・ヒントを有効にするには、ALTER SESSIONまたはALTER SYSTEMを使用して、セッション・レベルまたはシステム・レベルでパラメータOPTIMIZER_IGNORE_HINTSFALSEに設定します。

    たとえば、次のコマンドは、セッションでヒントを有効にします:
    ALTER SESSION 
      SET OPTIMIZER_IGNORE_HINTS=FALSE;

    また、SQL文内のPARALLELヒントを有効にするには、ALTER SESSIONまたはALTER SYSTEMを使用して、セッション・レベルまたはシステム・レベルでOPTIMIZER_IGNORE_PARALLEL_HINTSFALSEに設定します。

    たとえば、次のコマンドは、セッションでPARALLELヒントを有効にします:
    ALTER SESSION 
      SET OPTIMIZER_IGNORE_PARALLEL_HINTS=FALSE;
  • Autonomous Transaction Processing: Autonomous Database honorsオプティマイザ・ヒントおよびSQL文内のPARALLELヒントデフォルト

    オプティマイザ・ヒントを無効にするには、ALTER SESSIONまたはALTER SYSTEMを使用して、セッション・レベルまたはシステム・レベルでパラメータOPTIMIZER_IGNORE_HINTSTRUEに設定します。

    たとえば、次のコマンドは、セッションでヒントを無効にします:

    ALTER SESSION 
      SET OPTIMIZER_IGNORE_HINTS=TRUE;

    また、SQL文内のPARALLELヒントを無効にするには、ALTER SESSIONまたはALTER SYSTEMを使用して、セッション・レベルまたはシステム・レベルでOPTIMIZER_IGNORE_PARALLEL_HINTSTRUEに設定します。

    たとえば、次のコマンドは、セッションでPARALLELヒントを有効にします:

    ALTER SESSION 
      SET OPTIMIZER_IGNORE_PARALLEL_HINTS=TRUE;

自動索引付け

自動索引付けによって、Autonomous Databaseの索引管理タスクが自動化されます。自動索引付けは、Autonomous Databaseではデフォルトで無効になっています。

手動で索引を作成するには、データ・モデル、アプリケーションおよびデータの配布に関する詳しい知識が必要です。かつては、DBAがどの索引を作成するかの選択を担当していましたが、状況の変化に応じて、DBAが選択肢の改訂や索引のメンテナンスを行わない場合もありました。その結果、改善の機会が失われ、不要な索引の使用がパフォーマンスへの負担につながっていました。

Autonomous Databaseの自動索引付け機能では、アプリケーション・ワークロードがモニターされ、索引の作成とメンテナンスが自動的に行われます。

ヒント:

この手順を試してみる場合は、開発者およびデータベース・ユーザー専用Oracle Autonomous Databaseワークショップラボ14: 自動索引付けを実行します。
自動索引付けの有効化
  • 自動索引付けを有効にするには、DBMS_AUTO_INDEX.CONFIGUREプロシージャを使用します。たとえば、次の文を実行すると、データベースの自動索引付けが有効になり、新しい自動索引がSQL文で使用できるように可視索引として作成されます。
    EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','IMPLEMENT');
  • 自動タスクについてレポートし、自動索引付けプのリファレンスを設定するには、DBMS_AUTO_INDEXパッケージを使用します。
    ノート

    自動索引付けが有効になっている場合、自動索引の索引圧縮はデフォルトで有効になります。
自動索引付けの無効化
自動索引付けを無効にするには、DBMS_AUTO_INDEX.CONFIGUREプロシージャを使用します。たとえば、次の文を実行すると、データベースの自動索引付けが無効になり、新しい自動索引は作成されません。ただし、既存の自動索引は有効のまま変わりません。
EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');

詳細は、『Oracle Database管理者ガイド』の自動索引の管理に関する項を参照してください。

高速収集

高速収集では、データベースへの高頻度の単一行データ挿入の処理が最適化されます。高速収集では、ディスク書込み前の挿入のバッファリングにラージ・プールが使用され、データ挿入パフォーマンスが向上します。

高速収集の目的は、集計に重要な値が含まれる多くの情報データを生成するが必ずしもすべてのACID保証が必要なわけではないアプリケーションをサポートすることです。Internet of Things (IoT)の多くのアプリケーションには、センサー・データ、スマート・メーター・データ、さらにはトラフィック・カメラなど、迅速な「消防および忘却」タイプのワークロードがあります。これらのアプリケーションでは、データは収集され、その後の分析のために大量にデータベースに書き込まれる場合があります。

高速収集は、通常のOracle Databaseトランザクション処理とはまったく異なります。この場合、データはログ記録され、データベースに一旦書き込まれると(つまり、コミットされると)失われます。最大限の収集処理能力を実現するために、通常のOracleトランザクション・メカニズムは無視され、すべてのデータが実際にデータベースに書き込まれているかどうかは、アプリケーションの責任です。データがデータベースに書き込まれたかどうかを確認するために呼び出すことができる、特別なAPIが追加されました。

高速収集の概要およびこの機能の使用に関連するステップは、データベース・パフォーマンス・チューニング・ガイド高速収集の使用を参照してください。

Autonomous Databaseで高速収集を使用するには、次を実行する必要があります:
  • オプティマイザによるヒントの使用の有効化: 必要に応じて、セッション・レベルまたはシステム・レベルでoptimizer_ignore_hintsパラメータをFALSEに設定します。

    Autonomous Databaseワークロード・タイプによっては、デフォルトでoptimizer_ignore_hintsがシステム・レベルでFALSEに設定される場合があります。詳細は、オプティマイザの統計を参照してください。

  • 高速収集のための表の作成:高速収集の対象となる表の制限については、データベース・パフォーマンス・チューニング・ガイドを参照してください(指定された特性を持つ表は高速収集を使用できません)。

Oracle Schedulerでの事前定義済ジョブ・クラス

Autonomous Databaseには、Oracle Schedulerで使用する事前定義済のjob_class値が含まれています。これらのジョブ・クラスを使用すると、共通の特性および動作を共有するジョブを大きなエンティティにグループ化できるため、各クラスに割り当てられるリソースを制御することで、これらのクラス間で優先順位を付けることができます。

事前定義済ジョブ・クラスを使用すると、重要なジョブが優先され、ジョブの完了に必要なリソースを確保できます。たとえば、データ・ウェアハウスをロードする重要なプロジェクトの場合は、1つのクラスにすべてのデータ・ウェアハウス・ジョブを組み合せて、使用可能なリソースの割合を多く割り当てることによって、他のジョブより優先順位を付けることができます。また、ジョブ・クラス内のジョブに相対的な優先度を割り当てることもできます。

The predefined job_class values, TPURGENT, TP, HIGH, MEDIUM and LOW map to the corresponding consumer groups. These job classes allow you to specify the consumer group a job runs in with DBMS_SCHEDULER.CREATE_JOB.

DBMS_SCHEDULER.CREATE_JOBプロシージャは、Autonomous Databaseのjob_typeパラメータのPLSQL_BLOCKおよびSTORED_PROCEDUREジョブ・タイプをサポートします。

たとえば、次を使用して、HIGHコンシューマ・グループで実行する単一の通常ジョブを作成します:

BEGIN
   DBMS_SCHEDULER.CREATE_JOB (
     job_name => 'update_sales',
     job_type => 'STORED_PROCEDURE',
     job_action => 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY',
     start_date => '28-APR-19 07.00.00 PM Australia/Sydney',
     repeat_interval => 'FREQ=DAILY;INTERVAL=2',
     end_date => '20-NOV-19 07.00.00 PM Australia/Sydney',
     auto_drop => FALSE,
     job_class => 'HIGH',
     comments => 'My new job');
END;
/

Oracle Schedulerのノート:

  • DBMS_SCHEDULER.CREATE_JOBを使用するには、特定のロールまたは権限の追加の付与が必要になる場合があります。ADMINユーザーおよび DWROLEを持つユーザーは、必要な CREATE SESSIONおよび CREATE JOB権限を持っています。ユーザーにDWROLEがない場合は、CREATE SESSIONおよびCREATE JOB権限の付与が必要です。

  • instance_idジョブ属性は、Autonomous Databaseで実行されているOracle Schedulerジョブでは無視されます。

Oracle SchedulerおよびDBMS_SCHEDULER.CREATE_JOBの詳細は、「Oracle Schedulerを使用したジョブのスケジュール」を参照してください。

ジョブ属性の詳細は、SET_ATTRIBUTEプロシージャを参照してください。

パフォーマンス監視およびチューニング・ツール

ワークロードの変更、アプリケーション・サーバーやデータベース・サーバーでのリソース制限、単なるネットワーク・ボトルネックなどのいくつかの状況では、アプリケーションのパフォーマンスの問題が発生する可能性があります。Oracleには、パフォーマンスのモニター、パフォーマンス問題の診断、および問題解決のためのアプリケーションやデータベースのチューニングに役立つ様々なツールが用意されています。その一部を次に示します。
ツール 詳細
パフォーマンス・ハブ

Oracle Cloud Infrastructure (OCI)コンソールで使用可能な、すぐに使用できる機能豊富なツール。パフォーマンス・ハブには、Oracle Database ActionsおよびOracle Enterprise Managerも組み込まれています。

詳細は、パフォーマンス・ハブによるデータベース・パフォーマンスのモニターに関する項を参照してください。

Autonomous Databaseのメトリック

Autonomous Databaseメトリックは、CPUおよびストレージ使用率、データベース・ログインおよび接続試行の成功数や失敗数、データベース操作、SQL問合せ、トランザクションなど、有用な定量データを測定するのに役立ちます。メトリック・データを使用すると、Autonomous Databaseリソースの問題を診断してトラブルシューティングできます。

前提条件、使用状況、および専用Exadataインフラストラクチャ上のAutonomous Databaseで使用可能なメトリックのリストなどの詳細は、Autonomous Databaseメトリックを使用したデータベースのモニターを参照してください。

自動ワークロード・リポジトリ(AWR)および自動データベース診断モニター(ADDM)

これ以外によく使用される2つのツールは、自動ワークロード・リポジトリ(AWR)および自動データベース診断モニター(ADDM)です。

AWRには、Oracleデータベースのパフォーマンス関連統計が格納されます。ADDMは、AWRデータを定期的に分析し、パフォーマンスの問題の根本原因を特定し、問題を修正するための推奨事項を提供し、問題のないシステム領域を識別する診断ツールです。AWRは履歴パフォーマンス・データのリポジトリであるため、ADDMはイベント発生後のパフォーマンスの問題を分析でき、問題を再現する時間とリソースを節約できることがよくあります。

これらのツールの使用手順、およびデータベース・パフォーマンスのモニタリングとチューニングの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

AWRおよびADDMは、パフォーマンス・ハブからも使用できます。詳細は、パフォーマンス・ハブによるデータベース・パフォーマンスのモニターに関する項を参照してください。

データベース・パフォーマンスのモニタリングおよびチューニングの簡単な概要は、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。