5 リアルタイムなデータベース操作の監視
この章では、Oracle Enterprise Manager Cloud Control (Cloud Control)での現在および最近のデータベース操作の監視方法について説明します。この章のトピックは、次のとおりです:
参照:
-
APIを使用したデータベース操作の監視の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
データベース操作の監視について
Cloud Controlの「SQL監視」ページには、データベース操作実行中のパフォーマンスの管理、最近完了した操作に使用された時間およびリソースの詳細の表示およびデータベース操作の追跡やレポートに使用できる情報が表示されます。データベース操作は、エンド・ユーザーまたはアプリケーション・コードによって定義される一連のデータベース・タスクで、SQL文、PL/SQLファンクション、バッチ・ジョブまたは抽出、変換およびロード(ETL)処理などです。データベース操作の定義、監視およびレポート生成が可能です。
この項では、次の項目について説明します。
参照:
-
データベース操作の監視の詳細は、『Oracle Database SQLチューニング・ガイド』を参照
データベース操作のタイプ
データベース操作は、単一または複合のいずれかです。単純なデータベース操作には、単一のSQL文、PL/SQLのプロシージャまたはファンクションがあります。SQL文がパラレルで実行される場合、またはSQL文が1回の実行で5秒以上のCPUまたはI/O時間を消費している場合に、単一の操作の監視が自動的に開始されます。
複合データベース操作は、データベース・セッション内に定義された2つの時点の間のアクティビティです。「データベース操作の作成」で示すように、PL/SQLプロシージャを使用することで、複合操作を開始および終了します。1つのデータベース・セッションで同時に実行できるのは、1つの複合データベース操作のみです。
データベース操作の監視の目的
データベース操作監視は通常、次のユーザーにとって役に立ちます。
-
コストの高い(応答時間が短い)SQL文とPL/SQLファンクションの識別を行うDBA
-
データ・ウェアハウスまたはOLTPシステムでバッチ・ジョブを管理するDBA
-
Data Pump操作など、特定の操作に関連するアクティビティの監視が必要なアプリケーションまたはデータベースの開発者
データベース操作の監視は次のタスクの実行に役に立ちます。
-
追跡およびレポート作成
追跡では、最初に複合データベース操作を定義する必要があります。操作が始まると、その操作の追跡対象はデータベース・インフラストラクチャで判断されます。たとえば、チューニング・タスクとして、バッチ・ジョブのかわりに実行するSQL文やその実行統計の以前の状態、その操作の実行中にデータベースで発生した事象などの特定が必要な場合もあります。Cloud Controlで、複合データベース操作と、その複合データベース操作を構成する単純なデータベース操作のレポートを表示することができます。レポートは、ディスクに保存できます。
-
実行の進捗状況の監視
このタスクでは、現在実行中のデータベース操作の監視が行われます。この情報は、操作の完了に時間がかかる理由を調査している場合に特に役立ちます。
-
リソース使用率の監視
SQLの実行により過剰なCPUが使用されたり、過剰なI/Oが発行されたりするタイミング、およびSQLの実行に時間がかかるタイミングを検出することが必要な場合があります。Oracle Database Resource Manager (Resource Manager)を使用して、コンシューマ・グループごとに、そのグループにおけるすべてのSQL実行の最大リソース使用率を指定するしきい値を構成できます。SQL操作が指定されたしきい値に達したとき、Resource Managerでは、その操作をより優先順位の低いコンシューマ・グループに切り替えたり、セッションを終了したり、SQL操作をキャンセルして隔離します。このようなSQL操作をCloud Controlで調べることができます。
参照:
リソース・マネージャを使用してリソース制限を設定することによるコンシューマ・グループ切替えの詳細は、『Oracle Database管理者ガイド』を参照
-
レスポンス時間のチューニング
データベース操作をチューニングする際、通常はレスポンス時間の改善が求められます。多くの場合に、データベース操作のパフォーマンスの問題は主にSQLパフォーマンスの問題と言えます。
データベース操作の監視の有効化
リアルタイムなデータベース操作管理は、STATISTICS_LEVEL
初期化パラメータがTYPICAL
(デフォルト値)またはALL
に設定されている場合、デフォルトで有効になります。データベース操作の監視は、Oracle Tuning Packの機能であるため、CONTROL_MANAGEMENT_PACK_ACCESS
パラメータをDIAGNOSTIC+TUNING
(デフォルト値)に設定する必要があります。
参照:
リアルタイムなデータベース操作の監視の無効化方法は、『Oracle Database SQLチューニング・ガイド』を参照
データベース操作の属性
データベース操作には、一意に識別する属性があります。このような属性には、次のものがあります。
-
データベース操作名
これは、
daily_sales_report
など、ユーザーが作成する名前です。データベース操作の名前付けの例は、「データベース操作の作成」を参照してください。 -
データベース操作実行ID
複数の同じデータベース操作を、それぞれ別のデータベース・セッションで、同じ名前の異なる実行IDで同時に実行することができます。この数値IDによって同じデータベース操作の異なる実行が一意に識別されます。
データベース操作を開始すると、データベースによって、自動的に実行IDが作成されます。また、自分で実行IDを指定することもできます。
データベース操作の作成
DBMS_SQL_MONITOR
パッケージ・サブプログラムを使用して、コンポジット・データベース操作を作成できます。
次の例では、DBOP_EXAMPLE
という名前のデータベース操作を作成します。例では、データベース操作を開始します。顧客ごと、都市ごとに最大売上高を選択するPL/SQLプロシージャがあります。次に、2人以上の顧客がいる都市のすべての顧客の最大売上高を選択するSQL文があります。最後に、データベース操作を終了します。
例5-1 データベース操作の作成
VAR eid NUMBER EXEC :eid := DBMS_SQL_MONITOR.BEGIN_OPERATION('DBOP_EXAMPLE'); declare -- v1 number; -- CURSOR c1 IS SELECT cust_city FROM (SELECT COUNT(*) cnt, cust_city FROM sh.customers GROUP BY cust_city ORDER BY 1 desc); -- BEGIN FOR i IN c1 LOOP -- v1 := 0; -- SELECT MAX(amount_sold) INTO v1 FROM sh.sales WHERE cust_id IN (select cust_id FROM sh.customers WHERE cust_city=i.cust_city); -- DBMS_OUTPUT.PUT_LINE('Amount: '||v1); -- END LOOP; -- END; / SELECT MAX(asld) FROM (SELECT MAX(amount_sold) asld, cust_id FROM sh.sales WHERE cust_id IN (SELECT cust_id FROM sh.customers WHERE cust_city IN (SELECT cust_city FROM (SELECT count(*) cnt, cust_city FROM sh.customers GROUP BY cust_city HAVING COUNT(*) > 1) )) GROUP BY cust_id) / EXEC DBMS_SQL_MONITOR.END_OPERATION('DBOP_EXAMPLE',:eid);
ノート:
Oracle Database19c以降では、管理権限のないデータベース・ユーザーは、DBMS_SQL_MONITOR
パッケージ・サブプログラムを使用してコンポジット・データベース操作を作成し、Cloud Controlの「監視されたSQL実行」ページにナビゲートすることで、実行計画やパフォーマンス・メトリックを含む、それらの操作のSQL実行の詳細を表示することもできます。
参照:
-
APIを使用したデータベース操作の監視の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。
-
DBMS_SQL_MONITOR
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
Cloud Controlでのデータベース操作の監視
Cloud Controlの「監視されたSQL実行」ページには、現在実行中または完了したデータベース操作の表が表示されています。
Top 100の「実行者」リストの選択肢で、「最終アクティブ時間」、「期間」または「CPU時間」などの操作の側面によって表の行を並べ替えることができます。「タイプ」リストの選択肢で、すべての操作を表示することまたは行をフィルタ処理してSQL、PL/SQLまたはデータベース操作のみを表示することができます。
表には、操作のステータスおよびタイプ、操作ID、消費したデータベース時間、SQLテキストなどの操作に関するデータが含まれています。一部の列の値は他のページへのリンクで、カーソルを合わせると情報が表示されるものもあります。たとえば、「ID」列の値は、「監視されたSQL実行の詳細」ページへのリンクです。他の例として、カーソルを「データベース時間」列の棒に合わせると、待機クラス、期間、データベース時間の割合などの情報を表示するコンテキスト・メッセージが表示されます。たとえば、「データベース時間」列の棒を指すと、CPU: 2.8m (92%)
などのメッセージが表示されます。表から行を選択すると、表の上の「実行の詳細」、「SQLの詳細」および「セッションの詳細」制御がアクティブになります。
ノート:
Oracle Database 19c以降では、管理権限を持たないデータベース・ユーザーもCloud Controlの「監視されたSQL実行」ページにナビゲートして、SQL文の実行計画とパフォーマンス・メトリックを表示できます。
この項では、次の項目について説明します。
参照:
-
「監視されたSQL実行」の「詳細」ページの要素の説明は、Cloud Controlのオンライン・ヘルプを参照してください。
複合データベース操作のSQL実行の詳細の表示
この項では、複合データベース操作での実行の詳細を表示する方法について説明します。
複合データベース操作の実行の詳細を表示するには:
-
データベース・ホームページにアクセスします。
詳細は、「データベースのホームページのアクセス」を参照してください。
-
「パフォーマンス」メニューから、「パフォーマンス・ハブ」を選択し、「SQLモニタリング」を選択します。
「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「監視されたSQL実行」ページが表示されます。
-
表で、複合データベース操作のIDをクリックします。
操作の「監視されたSQL実行の詳細」ページが表示されます。「詳細」セクションでは、デフォルトで「アクティビティ」サブページが選択されます。「アクティビティ」グラフの領域を選択するかまたは凡例の対応するSQL ID値を選択すると、その文の「SQLの詳細」ページが表示されます。
-
操作のメトリックを表示するには、「メトリック」タブをクリックします。
SQL文のSQL実行の詳細の表示
この項では、SQL文の実行の詳細を表示する方法を説明します。
SQL文の実行の詳細を表示するには:
-
データベース・ホームページにアクセスします。
詳細は、「データベースのホームページのアクセス」を参照してください。
-
「パフォーマンス」メニューから、「パフォーマンス・ハブ」を選択し、「SQLモニタリング」を選択します。
「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「監視されたSQL実行」ページが表示されます。
-
表でSQL文のIDをクリックします。
操作の「監視されたSQL実行の詳細」ページが表示されます。「詳細」セクションでは、デフォルトで「計画統計」サブページが選択されています。
PL/SQL文のSQL実行の詳細の表示
この項では、PL/SQL文の実行の詳細の表示について説明します。
PL/SQL文の実行の詳細を表示するには:
-
データベース・ホームページにアクセスします。
詳細は、「データベースのホームページのアクセス」を参照してください。
-
「パフォーマンス」メニューから、「パフォーマンス・ハブ」を選択し、「SQLモニタリング」を選択します。
「データベース・ログイン」ページが表示されたら、管理者権限のあるユーザーとしてログインします。「監視されたSQL実行」ページが表示されます。
-
表でPL/SQL文のIDをクリックします。
操作の「監視されたSQL実行の詳細」ページが表示されます。「詳細」セクションでは、デフォルトで「アクティビティ」サブページが選択されます。