パフォーマンス

Oracle Application Expressアプリケーションでパフォーマンスの問題が発生したときに調査すべき要素はいくつかあります。

パフォーマンスの問題の特定

動作が遅いアプリケーションを調査する場合は、まずボトルネックの場所を特定します。 Oracle Application Expressアプリケーションのパフォーマンスは、リクエストまたは送信した特定のページがデータベースから返されるのにかかる時間を調べれば判定できます。 この時間が、ユーザーのブラウザにページをレンダリングするときにかかる時間よりも短ければ、アプリケーションそのものが遅いと感じる原因は他のコンポーネントにある可能性が高くなります。 クライアント・マシン、ネットワーク、中間層、データベース、ディスク/ストレージ・デバイスを含め、関係するコンポーネントはすべてチェックする必要があります。 データベースに関しては、SGA、CPU使用率、ロックおよびデータベース・パラメータをチェックします。 また、レガシー・アプリケーション、データウェアハウス、バッチ・プログラム、データベース・ジョブなど、データベース内でほかに実行されているものを確認することも重要です。

Oracle Application Expressアプリケーションで発生するパフォーマンスの問題の原因は、開発者が記述したSQLやPL/SQLにある場合がほとんどです。 このような問題には、標準のデータベース・パフォーマンス・チューニング手法を使用して対処する必要があります。 Oracle Application ExpressまたはOracle Databaseのバグに関連して問題が発生することはめったにありません。 パフォーマンスの問題の診断手順は、時間枠を識別し、データベースの時間をもっとも消費しているものを分離し、Oracle Application Expressのワークスペースとアプリケーションを特定し、問題を起こしているSQLとアプリケーション内の具体的な場所とを相互に関連付けます。 動作が遅いページを特定したらデバッグ・モードでアプリケーションを実行し、ほとんどの時間を消費しているコンポーネントを具体的に識別する必要があります。

最適化したのに処理時間が1秒を超える問合せについては、"プログレス・バー"の実装とページの多重実行の防止を検討する必要があります。 ユーザーは瞬時に結果が返されると思っているため、すぐに結果が返されないとページを送信し直すことがよくあります。 ページが送信されるたびにデータベースで新しいセッションが開始され、適切に管理しない限り、処理が完了するまでセッションが継続します。 そのためにパフォーマンスが低下することがよくあり、データベース・ロックを誘発することもあります。 これは特にインタラクティブ・レポートに言えることです。 代替手段としては、Oracle Application Expressのコレクションを使用して問合せ結果を保持する方法が考えられます。 コレクションを使用すると、ページ切替えやフィルタ処理などを実行するたびではなく、ユーザーごとに1回だけ高コストで時間を消費する問合せが実行されます。

アクティビティ・ログおよび監視

管理者がさまざまなレポートを使用して使用率やパフォーマンスを調査できるように、Oracle Application Expressエンジンによってアクティビティ・ログが記録されます。 特定のページにアクセスが集中している場合やページのレンダリングが遅い場合は、これらのレポートからページを特定できることがよくあります。 このようなページを対象にして分析を進め、たとえば、実行計画を確認できるようにするために、SQL Developerでレポート問合せを実行します。 ページまたはプロセス内の高コストな要素を特定する別の手法としては、Oracle Application Expressのデバッグ・モードを調査する方法があります。 アクティビティ・ログの切替えはデフォルトでは14日ごとですが、この設定はインスタンス管理者が変更できます。 ログ・ファイルを無期限に保持する必要がある場合は、バッチ・ジョブを作成し、アクティビティ・ログ表から独自の表へレコードをコピーする必要があります。

ワークスペース管理者が使用できるアクティビティ・レポートは次のものを含めて多数あります。
ページ・ビュー - ビュー別、ユーザー別、アプリケーション別、またはアプリケーションとページ別にまとめたページ・ビューのレポートが含まれます。
開発者アクティビティ - 開発者別、日別、アプリケーション別、アプリケーション変更別、および日または月別にまとめた開発者アクティビティのレポートです。
ページ・ビューの分析 - アプリケーション別のトップ・ページ・ビューなど、ページ・ビューを分析するレポートが含まれます。
セッション - アクティブ・セッションと現行のワークスペースがリストされます。
ログイン試行回数 - ログインの試行回数をリストしたレポートです。
環境 - ユーザー・エージェント別、ブラウザ別、外部アクセス別またはオペレーティング・システム別にまとめた環境のレポートが含まれます。
アプリケーション・エラー - アプリケーション・エラーのレポートが含まれます。
ワークスペース・スキーマ・レポート - スキーマ表領域の使用率およびスキーマ別のデータベース権限のサマリーと、現行のワークスペースで使用可能なすべてのデータベース・スキーマのリストを提供します。

インスタンス管理者は次のレポートを使用できます。
ページ・ビュー - アプリケーション別、ユーザー別、ワークスペース別、日別、またはRESTアクセス別にアクティビティを表示します。
ワークスペースの消去 - ダッシュボード・サマリー、アクティブでないワークスペース、消去済みのワークスペース、アクティブになったワークスペース、またはワークスペースの消去ログを表示します。
環境レポート - 使用されたオペレーティング・システム、ブラウザの種類、ユーザー・エージェント、または外部サイトのサマリーを表示します。
カレンダ・レポート - 最後に使用された日付別にワークスペースを表示し、日別、さらにアプリケーションおよびユーザー別、または時間別にページ・ビューを表示します。
サービス・リクエスト - 新規サービス・リクエストまたはサインアップ・アンケートのアクティビティを表示します。
ログ - メール・ログ、ジョブ・ログ、自動削除ログを表示したり、パッケージ・アプリケーションのインストールを監視したりします。
ログイン試行回数 - ログインの試行回数または最後にログインした開発者を表示します。
開発者アクティビティ - 開発者別またはワークスペース別にアプリケーション変更を表示します。

データベース・レポート

Oracle Application ExpressはAPEX_PUBLIC USERとしてデータベース・プールから物理接続を確立し、Oracle Application Expressエンジンをこのユーザーでコールします。 Oracle Application ExpressエンジンはSQL.DBMS_SYS_SQLを使用して別のユーザー(解析するスキーマ)としてSQLを解析します。 データベースのV$SESSIONレコードには、実行したSQL別の役立つ情報が含まれており、中にはOracle Application Express固有の情報としてクライアントの情報、クライアント識別子、およびモジュールも含まれています。 Oracle Traceファイルを生成してTKPROFでファイルを解析する場合は、このような情報を元にして関連するSQLを識別できます。 Oracle Application ExpressのURLの最後に&p_trace=YESを追加するか、ALTER SESSIONを使用することができます。

パフォーマンス統計情報は、デフォルトでは1時間おきに自動ワークロード・リポジトリ(AWR)レポートに収集されます。 アクティブ・セッション履歴(ASH)レポートは、システム全体でのデータベース・アクティビティの記録です。 これらのレポートは、リソース消費量の多いSQL文の特定に使用できます。 他のPL/SQLプログラムをコールするPL/SQLパッケージ、PL/SQLプロシージャおよびPL/SQLファンクションについては、実行時間を個別に報告する11gのPL/SQL階層プロファイラ(10gではPL/SQLプロファイラ)を使用できます。 Oracle Application Expressには、Oracle Application Expressに関連するあらゆるもののデータベース・カタログであるビューもいくつかあります。 これらのビューを使用すると、SQL Developer、SQL*Plus、コマンドラインなどのツールを使用してOracle Application Expressの情報にアクセスできます。 APEX_ADMINISTRATOR_ROLEを付与されている場合は、自分のスキーマ・ユーザーが関連付けられているワークスペースだけでなく、インスタンス全体へ問合せができます。

データベースの構成

データベース・パラメータには、パフォーマンスにも影響を与える可能性があるものがあります。 具体的には、SHARED_POOL_SIZEパラメータとJOB_QUEUE_PROCESSESパラメータのサイズが正しく設定されているかどうかを確認する必要があります。 ほかには、データベースのシステム・グローバル領域(SGA)が実メモリに適合しているかどうか確認することも重要です。 SGAのサイズが小さすぎると、Oracle Application Expressのパフォーマンスが大幅に低下する恐れがあります。 PL/SQL用の共有プールおよびOracle Application Expressのメタデータ用のバッファ・キャッシュに十分なメモリがあることも必要です。 SGAのサイズが正しく設定されている場合は、Oracle Application ExpressエンジンのPL/SQLプログラムに定期的にアクセスするため、プログラムを固定する必要もメモリからスワップアウトする必要もありません。 Oracle Application Expressエンジンがデータベースに常駐していることを考えると、APEX_040200スキーマで統計を収集することが強く推奨されます。 正確な統計があれば、アプリケーション・メタデータにアクセスするためのより適切な問合せ計画をコストベース・オプティマイザで作成できるでしょう。

リソース制限

Oracle Database Enterprise Editionのオプションであるデータベース・リソース・マネージャは、Oracle Application Expressインスタンスの保守に極めて有用です。 リソース・マネージャでは、使用可能なシステム・リソースの種類(CPU_PER_CALLおよびLOGICAL_READS_PER_CALL)をユーザー・リクエスト単位で制限できます。 複数のリソース・プロファイルを設定し、プロファイル間での自動切替えを設定すれば、ユーザー・リクエストが特定のしきい値を超えた場合にそのトランザクションで使用できるCPUを減らすことができます。 たとえば、CPUの70%を10秒間使用できるAPEX_HIGHをデフォルト・プロファイルとして定義し、CPUの8%を120秒間使用できるAPEX_MEDIUM、CPUの2%を1800秒間使用できるAPEX_LOW、CPUの20%を使用できるOTHERSを定義することができます。 特定のトランザクションが10秒を超えると、使用可能なCPUを激減させるAPEX_MEDIUMプロファイルに切り替わります。 トランザクションがAPEX_LOWに切り替わってから1800秒を超えたら、SQLを取り消すかセッションを終了させることができます。 この機能を使用すると、他のユーザーおよびアプリケーションのレスポンス低下を招くCPUの独占を、特定の1人のユーザーまたは適切に記述されていない1つのアプリケーションで発生させないようにすることができます。

Webサーバー

パフォーマンスを向上させるには、静的ファイルをWebサーバー上に配置する必要があります。 また、Webサーバー上でのgzip圧縮を有効にし、静的ファイルをブラウザに送信するときにファイル・サイズが最小化されるようにする必要があります。 さらに、expirationヘッダーを送信し、ブラウザでのファイルのキャッシュを有効化します。