2022年7月28日木曜日

Autonomous Databaseで利用できるapex-adb-xxx擬似ヒントの確認

 Oracle APEXのレポートやチャートのソースに、オプティマイザ・ヒントを指定できます。このプロパティで指定できるオプティマイザ・ヒントには、データベースへのヒントではなくAPEXによって解釈されるヒントが含まれます。Oracle APEXでは擬似ヒントと呼んでいます。

Autonomous Databaseで使うことのできるapex-adb-high、apex-adb-medium、apex-adb-low、apex-adb-tp、apex-adb-tpurgentといった擬似ヒントがあるとのことで、確認してみました。

リソース・マネージャのコンシューマ・グループの切り替えは、以前の記事でCS_SESSION.SWITCH_SESSIONを呼び出して実装したことがあります。擬似ヒントの指定により切り替えができるのであれば、コンシューマー・グループの切り替えを簡単に実装できます。

確認作業に使用するアプリケーションを作成します。

アプリケーション作成ウィザードを起動します。

アプリケーションの名前擬似ヒントの確認とし、ページの追加をクリックします。

ダイアログが開きます。追加ページを開き、クラシック・レポートを選択します。


ページ名サービスの確認SQL問合せを選択します。ページは、クラシック・レポートです。SQL問合せとして、以下を記述します。
select
    sys_context('USERENV','SID') sid
    , sys_context('USERENV','SESSIONID') audsid
    , sys_context('USERENV','SERVICE_NAME') service_name
from dual
ページの追加をクリックします。


アプリケーションの作成を実行します。


アプリケーションが作成されました。ページ・デザイナにて、ページ番号のサービスの確認を開きます。


クラシック・レポートのリージョンサービスの確認を選択し、ソースオプティマイザ・ヒントとしてapex-adb-mediumを指定します。


アプリケーションを実行し、クラシック・レポートの表示を確認します。

サービス名が切り替わっていることが確認できます。


擬似ヒントのスペルが間違っていてもエラーは発生しないので、注意が必要です。

デバッグの完全トレースを取得し、実行されているコマンドを確認します。

レポートのソースであるSELECT文が実行される前に、execution service levelとしてapex-adb-high、apex-adb-low、apex-adb-medium、apex-adb-tp、apex-adb-tpurgentがあることが確認されています。今回テストに使用しているインスタンスはAutonomous Transaction Processingなのでapex-adb-tp、apex-adb-tpurgentが含まれますが、Autonomous Data Warehouseの場合はapex-adb-high、apex-adb-low、apex-adb-mediumの3つと思われます。

この後alter session文を発行して、サービスを切り替えています。

executing switch service SQL: "alter session set container="XXXXXXXXXXXX_APEXSERV" service="XXXXXXXXXXXX_APEXSERV_medium.adb.oraclecloud.com""


レポートのSELECT文を実行した後に、元のexecution service levelに戻しています。


Autonomous Databaseで利用できるapex-adb-xxx擬似ヒントを、簡単に確認してみました。

簡単なアプリケーションですが、以下にエクスポートを置きました。
https://github.com/ujnak/apexapps/blob/master/exports/confirm-adb-psedudo-hint.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。