2024年11月1日金曜日

Oracle APEXのコンポーネント表示時に実行されるSQLの処理時間を確認する

Oracle APEXのコンポーネント表示時に実行されるSQLの処理時間を確認する方法を紹介します。

最初に以下のようなダッシュボードのページを例に取ります。


開発者ツールバーのデバッグを選択し、デバッグ・レベル情報(デフォルト)に変更します。


ブラウザの開発ツールに含まれるJavaScriptコンソールを開きます。以下はChromeで実行しています。


ページの再表示といったブラウザの操作を実施し、確認したいSELECT文を実行します。

JavaScriptコンソールに色々とメッセージが表示されます。


JavaScriptコンソールに出力されているメッセージの中に、以下のような記述が見つかります。

Server debug log message written: View Identifier = 49143, Level = 3. http://.....


http(s)://...で始まるURLを開くと、サーバー側で生成されたデバッグ・メッセージが表示されます。


デバッグ・メッセージの中に、コンポーネントが実行したSQLが見つかります。


経過や実行に処理時間が記載されていますが、SQL文が記載されている場所の時間はパースにかかった時間になり、SELECT処理全体の一部です。その後のfetch処理にかかっている時間も含めて、処理時間を確認します。

デバッグ・レベル完全トレースにすると、実行されているSELECT文の実行計画がデバッグ・メッセージとして出力されます。


その他にも詳細な情報が含まれますが、ページの表示には相当な時間がかかります。完全トレースはある程度、原因を絞り込んでから取得した方が効果的です。


ファセット検索のページでは、ファセットの選択ごとにサーバー側のデバッグ・メッセージへのリンクが出力されます。


対話グリッドのような遅延ロードをサポートしているコンポーネントは、リージョンをリフレッシュするときにSELECT文が実行されます。そのため、デバッグ・メッセージも出力されます。


JavaScriptコンソールに表示されるリンクをクリックすると、サーバー側の処理のデバッグ・メッセージが開くのは便利ですが、つねに新規のタブとして開く点には注意が必要です。

あまりタブが開きすぎないように、参照しなくなったタブは閉じるようにします。タブを閉じても、記録されたデバッグ・メッセージはデータベースに保存されているので、後から参照することもできます。特にページ・ビュー識別子を記録していれば、デバッグ・ログを一意に選択できます。そうでなくても、ページ番号、実行時刻(タイムスタンプ)およびパス情報などから、デバッグ・メッセージ探すことができます。


新たなタブで開いているデバッグ・メッセージの画面からアプリケーション・ビルダーを開いてしまうと、すでに開いているアプリケーション・ビルダーのセッションが無効になってしまいます。なので、そのような操作は行わない方がよいです。

今回の記事は以上です。