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を呼び出して実装したことがあります。擬似ヒントの指定により切り替えができるのであれば、コンシューマー・グループの切り替えを簡単に実装できます。
確認作業に使用するアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。
アプリケーションの名前を擬似ヒントの確認とし、ページの追加をクリックします。
ダイアログが開きます。追加ページを開き、クラシック・レポートを選択します。
select
sys_context('USERENV','SID') sid
, sys_context('USERENV','SESSIONID') audsid
, sys_context('USERENV','SERVICE_NAME') service_name
from dual
ページの追加をクリックします。アプリケーションが作成されました。ページ・デザイナにて、ページ番号2のサービスの確認を開きます。
クラシック・レポートのリージョンサービスの確認を選択し、ソースのオプティマイザ・ヒントとして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文を発行して、サービスを切り替えています。
レポートのSELECT文を実行した後に、元のexecution service levelに戻しています。
Autonomous Databaseで利用できるapex-adb-xxx擬似ヒントを、簡単に確認してみました。
簡単なアプリケーションですが、以下にエクスポートを置きました。
https://github.com/ujnak/apexapps/blob/master/exports/confirm-adb-psedudo-hint.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完