DBMS_WORKLOAD_REPLAY
パッケージでは、DBMS_WORKLOAD_CAPTUREパッケージによって最初に作成されたワークロード取得をリプレイするために使用されるインタフェースが提供されます。 通常、DBMS_WORKLOAD_CAPTURE
パッケージは、本番システムで本番ワークロードを取得する場合に使用され、DBMS_WORKLOAD_REPLAY
パッケージは、その後、取得された本番ワークロードをテストするためにテスト・システムでリプレイする場合に使用されます。
関連項目: データベース・リプレイの詳細は、『Oracle Database Real Application Testingユーザーズ・ガイド』を参照してください。 |
この章では、次の項目について説明します。
この項で示すコードには、次の操作に必要な最小限の権限が記述されています。
ディレクトリ・オブジェクトの作成
DBMS_WORKLOAD_CAPTURE
およびDBMS_WORKLOAD_REPLAY
パッケージで提供されるインタフェースの操作
リプレイ・クライアント・ユーザー(wrc someuser
/somepassword
またはwrc USER=someuser
PASSWORD=somepassword
)としての動作
DROP USER rom1 CASCADE; CREATE USER rom1 IDENTIFIED BY rom1; GRANT EXECUTE ON DBMS_WORKLOAD_CAPTURE TO rom1; GRANT EXECUTE ON DBMS_WORKLOAD_REPLAY TO rom1; GRANT CREATE SESSION TO rom1; GRANT CREATE ANY DIRECTORY TO rom1; GRANT SELECT_CATALOG_ROLE TO rom1; GRANT BECOME USER TO rom1;
取得システムとリプレイ・システムの両方にあるファイルおよびディレクトリに対してアクセスおよび操作を行うには、適切なOS権限が必要です。つまり、取得またはリプレイを実行しているOracleプロセスおよびOSユーザーは、インスタンスが実行されているホストからアクセス可能な1つ以上の共通ディレクトリに対してアクセスおよび操作を行うことができる必要があります。また、リプレイを実行しているOSユーザーは、必要に応じてリプレイ・クライアントのホストに取得データをコピーできるように、リプレイ・クライアントで使用されるホスト上でのwrcの実行およびファイル・システムへの適切なアクセスを行うことができる必要があります。
次の表に、このパッケージのすべてのサブプログラムをアルファベット順に示します。
表145-1 DBMS_WORKLOAD_REPLAYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
処理されたワークロード取得ディレクトリで動作し、指定したワークロードを正確にリプレイするために必要とされるホストおよびワークロード・リプレイ・クライアントの数を見積もります。 |
|
進行中のワークロードのリプレイを取り消します。 |
|
指定したワークロード・リプレイIDに対応する |
|
指定したリプレイIDに関連付けられたAWRスナップショットをエクスポートします。 |
|
ワークロード取得に関する情報と、関連ディレクトリからのすべてのワークロード・リプレイ試行の履歴に関する情報を取得します。 |
|
特定のリプレイIDに関連付けられたAWRスナップショットをインポートします。 |
|
リプレイを初期化し、処理中に生成された特定のデータをデータベースにロードします。 |
|
進行中のワークロードのリプレイを一時停止します。 |
|
RDBMSを特別な準備モードにします。 |
|
|
|
ワークロードのリプレイ中にユーザー・セッションが希望の方法でデータベースに接続できるように、取得された接続を新しい接続に再マップします。 |
|
特定のワークロードのリプレイに関するレポートを生成します。 |
|
一時停止しているワークロードのリプレイを再開します。 |
|
ワークロードのリプレイを開始します。 |
このファンクションは、処理されたワークロード取得ディレクトリで動作し、指定したワークロードを正確にリプレイするために必要とされるホストおよびワークロード・リプレイ・クライアントの数を見積もります。このファンクションは、結果をXML CLOB
として戻します。
構文
DBMS_WORKLOAD_REPLAY.CALIBRATE ( capture_dir IN VARCHAR2, process_per_cpu IN BINARY_INTEGER DEFAULT 4, threads_per_process IN BINARY_INTEGER DEFAULT 50) RETURN CLOB;
パラメータ
表145-2 CALIBRATEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
処理済の取得データが格納されたOSディレクトリを指すディレクトリ・オブジェクトの名前(大/小文字が区別される)。 |
|
CPUごとに許可される処理の最大数(デフォルトは4)。 |
|
処理ごとに許可されるスレッドの最大数(デフォルトは50)。 |
戻り値
次の情報が含まれているXML形式のCLOBを戻します。
取得に関する情報
現行のデータベース・バージョン
このファンクションへの入力パラメータ
指定したワークロードのリプレイに必要なCPUおよびリプレイ・クライアントの数
取得されたセッションに関する情報(合計数および最大同時実行)
使用上の注意
前提条件: 同じデータベース・バージョンで、PROCESS_CAPTUREプロシージャを使用して、入力ワークロード取得がすでに処理されています。
このプロシージャは、calibrateモードでのワークロード・リプレイ・クライアントと同じ結果を戻します。calibrateモードは、次のように実行できます。
$ wrc mode=calibrate replaydir=
このプロシージャは、進行中のワークロードのリプレイを取り消します。すべての外部リプレイ・クライアント(WRC)は、取得したワークロードの発行を停止し、終了するように自動的に通知されます。
構文
DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ( error_msg IN VARCHAR2 DEFAULT NULL);
パラメータ
表145-3 CANCEL_REPLAYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
リプレイを取り消すオプションの理由を渡すことができ、この理由は |
使用上の注意
前提条件: INITIALIZE_REPLAYプロシージャ、PAUSE_REPLAYプロシージャまたはSTART_REPLAYプロシージャに対するコールがすでに発行されています。
このプロシージャは、指定したワークロード・リプレイIDに対応するDBA_WORKLOAD_REPLAYS
内の行を削除します。
構文
DBMS_WORKLOAD_REPLAY.DELETE_REPLAY_INFO ( replay_id IN NUMBER);
パラメータ
表145-4 DELETE_REPLAY_INFOプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
削除する必要があるワークロード・リプレイのID。 |
このプロシージャは、規定のリプレイIDに関連付けられたAWRスナップショットをエクスポートします。
構文
DBMS_WORKLOAD_REPLAY.EXPORT_AWR ( replay_id IN NUMBER);
パラメータ
使用上の注意
各リプレイの最後に、対応するAWRスナップショットが自動的にエクスポートされます。 そのため、EXPORT_AWR
の自動起動が失敗しないかぎり、ワークロードのリプレイが完了した後に手動でエクスポートする必要はありません。
このプロシージャは対応するワークロードのリプレイが現行のデータベースで実行され(このことは、DBA_WORKLOAD_REPLAYS
内の対応する行がGET_REPLAY_INFOファンクションのコールによって作成されていないことを意味します)、そのリプレイ時間に対応するAWRスナップショットが使用可能である場合にのみ機能します。
このファンクションは、ワークロード取得に関する情報と、規定のディレクトリからのすべてのワークロード・リプレイ試行の履歴に関する情報を取得します。
構文
DBMS_WORKLOAD_REPLAY.GET_REPLAY_INFO ( dir IN VARCHAR2) RETURN NUMBER;
パラメータ
戻り値
このプロシージャは、インポートされた情報にアクセスするDBA_WORKLOAD_
CAPTURE_ID
およびDBA_WORKLOAD_REPLAYS
.CAPTURE.ID
の両方に関連付けることができるCAPTURE_ID
を戻します。
使用上の注意
このプロシージャは、まず、取得に関する情報が含まれるDBA_WORKLOAD_CAPTURES
に行をインポートします。 次に、指定したリプレイ・ディレクトリから取り出されたすべてのリプレイ試行の行をDBA_WORKLOAD_REPLAYS
にインポートします。
指定したディレクトリに存在する取得およびリプレイの履歴について記述する行が、DBA_WORKLOAD_CAPTURES
およびDBA_WORKLOAD_REPLAYS
にすでに含まれている場合、このプロシージャはこれらのビューに新しい行を挿入しません。
このファンクションは、指定したリプレイからAWRスナップショットをインポートします。
構文
DBMS_WORKLOAD_REPLAY.IMPORT_AWR ( replay_id IN NUMBER, staging_schema IN VARCHAR2) RETURN NUMBER;
パラメータ
表145-7 IMPORT_AWRファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
AWRスナップショットがエクスポートされるリプレイのID。(必須) |
|
リプレイ・ディレクトリから |
戻り値
AWRスナップショットをインポートするときに使用した、ランダムに生成された新しいデータベースIDを戻します。 DBA_WORKLOAD_REPLAYS
ビューのAWR_DBID
列に同じ値があります。
使用上の注意
このファンクションは、それらのAWRスナップショットがEXPORT_AWRプロシージャを使用して、元のリプレイ・システムから事前にエクスポートされていた場合に機能します。
入力として指定したstaging_schema
に、任意のAWR表と同じ名前(WRM$_SNAPSHOT
、WRH$_PARAMETER
など)を持つ表が含まれている場合、IMPORT_AWR
は失敗します。このような表をstaging_schema
から削除してから、IMPORT_AWR
を起動します。
このプロシージャはデータベースの状態をREPLAY
モードのINIT
に設定し、(PAUSE_REPLAYプロシージャを実行して)リプレイの準備をする前に、必要なリプレイ・システムにデータをロードします。
構文
DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY ( replay_name IN VARCHAR2, replay_dir IN VARCHAR2);
パラメータ
表145-8 INITIALIZE_REPLAYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ワークロード・リプレイの名前。処理済のワークロード取得のすべてのリプレイに名前を付けることができます。(必須) |
|
処理済の取得データが格納されたOSディレクトリを指すディレクトリ・オブジェクトの名前(大/小文字が区別される)。 |
使用上の注意
前提条件は次のとおりです。
同じデータベース・バージョンで、PROCESS_CAPTUREプロシージャを使用して、ワークロード取得がすでに処理されています。
データベースの状態は、元のワークロード取得の開始時点の状態に論理的にリストアされています。
サブプログラムは、PAUSE_REPLAYプロシージャをコールしてリプレイの準備をする前に、必要なリプレイ・システムにデータをロードします。
たとえば、取得中に、各セッションでサーバーへの接続に使用された接続文字列を記録することがあります。 INITIALIZE_REPLAYプロシージャはこのデータをロードして、記録された接続文字列を、ユーザーが新しい接続文字列やサービス・ポイントに再マップできるようにします。
PROCESS_CAPTUREプロシージャに示した例を詳細に指定して、次のようなコマンドを起動できます。
DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY('replay foo #1', 'rec_dir');
このコマンドは接続マップをロードし、デフォルトで、リプレイ時接続文字列をすべてNULL
と同じに設定します。NULL
のリプレイ時接続文字列は、ワークロード・リプレイ・クライアント(WRC)が、リプレイ・クライアントのランタイム環境設定によって決定されるデフォルトのホストに接続することを意味します。 ユーザーは、REMAP_CONNECTIONプロシージャを使用して、特定の接続文字列をリプレイ用の新しい接続文字列(または新しいサービス・ポイント)に変更できます。
このプロシージャは、進行中のワークロードのリプレイを一時停止します。 リプレイ・クライアントからの後続のすべてのコールは、RESUME_REPLAYプロシージャへのコールが発行されるか、またはリプレイが取り消されるまで停止状態になります。
構文
DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY;
使用上の注意
前提条件: START_REPLAYプロシージャに対するコールがすでに発行されています。
PAUSE_REPLAYの発行時にすでに進行中のユーザー・コールは最後まで実行できます。 後続のユーザー・コールのみが、発行された場合に一時停止されます。
このプロシージャは、データベースの状態をPREPARE FOR REPLAY
モードに設定します。
構文
DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY ( synchronization IN BOOLEAN DEFAULT TRUE, connect_time_scale IN NUMBER DEFAULT 100, think_time_scale IN NUMBER DEFAULT 100, think_time_auto_correct IN BOOLEAN DEFAULT TRUE);
パラメータ
表145-9 PREPARE_REPLAYプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ワークロードのリプレイ中に、同期化を |
|
ワークロード取得が開始されてから、指定した値でセッションが接続されるまでの経過時間を変更します。入力は、%値として解釈されます。ワークロードのリプレイ中に同時ユーザー数を増加または削減する場合に使用できます。 |
|
同じセッションからの2つの連続したユーザー・コール間の経過時間を変更します。入力は、%値として解釈されます。ワークロードのリプレイ中に同時ユーザー数を増加または削減する場合に使用できます。 |
|
リプレイでのユーザー・コールの完了にかかる時間が、元の取得で同じユーザー・コールの完了にかかった時間よりも長くなる場合に、コール間の思考時間を適切に自動修正します。 |
使用上の注意
前提条件は次のとおりです。
データベースは、リプレイに備えてINITIALIZE_REPLAYプロシージャを使用して初期化されています。
再マッピングが必要なすべての取得時接続文字列が、REMAP_CONNECTIONプロシージャを使用して、すでに再マッピングされています。
PREPARE_REPLAY
プロシージャを実行すると、1つ以上の外部リプレイ・クライアント(WRC)を開始できます。
例
connect_time_scaleパラメータの適用
元のワークロード取得中に次のことが確認されたとします。
12:00 : Capture was started 12:10 : First session connect (10m after) 12:30 : Second session connect (30m after) 12:42 : Third session connect (42m after)
connect_time_scaleが50の場合、セッション接続は次のようになります。
12:00 : Replay was started with 50% connect time scale 12:05 : First session connect ( 5m after) 12:15 : Second session connect (15m after) 12:21 : Third session connect (21m after)
connect_time_scaleが200の場合、セッション接続は次のようになります。
12:00 : Replay was started with 200% connect time scale 12:20 : First session connect (20m after) 13:00 : Second session connect (60m after) 13:24 : Third session connect (84m after)
think_time_scaleパラメータの適用
元のワークロード取得中に次のことが確認されたとします。
12:00 : User SCOTT connects 12:10 : First user call issued (10m after completion of prevcall) 12:14 : First user call completes in 4mins 12:30 : Second user call issued (16m after completion of prevcall) 12:40 : Second user call completes in 10m 12:42 : Third user call issued ( 2m after completion of prevcall) 12:50 : Third user call completes in 8m
ワークロードのリプレイ時にthink_time_scaleが50の場合、ユーザー・コールは次のようになります。
12:00 : User SCOTT connects 12:05 : First user call issued 5 mins (50% of 10m) after the completion of previous call 12:10 : First user call completes in 5m (takes a minute longer) 12:18 : Second user call issued 8 mins (50% of 16m) after the completion of prev call 12:25 : Second user call completes in 7m (takes 3 minutes less) 12:26 : Third user call issued 1 min (50% of 2m) after the completion of prev call 12:35 : Third user call completes in 9m (takes a minute longer)
think_time_auto_correctパラメータの適用
元のワークロード取得中に次のことが確認されたとします。
12:00 : User SCOTT connects 12:10 : First user call issued (10m after completion of prevcall) 12:14 : First user call completes in 4m 12:30 : Second user call issued (16m after completion of prevcall) 12:40 : Second user call completes in 10m 12:42 : Third user call issued ( 2m after completion of prevcall) 12:50 : Third user call completes in 8m
ワークロードのリプレイ時にthink_time_scaleが100で、think_time_auto_correctがTRUEの場合、ユーザー・コールは次のようになります。
12:00 : User SCOTT connects 12:10 : First user call issued 10 mins after the completion of prev call 12:15 : First user call completes in 5m (takes 1 minute longer) 12:30 : Second user call issued 15 mins (16m minus the extra time of 1m the prev call took) after the completion of prev call 12:44 : Second user call completes in 14m (takes 4 minutes longer) 12:44 : Third user call issued immediately (2m minus the extra time of 4m the prev call took) after the completion of prev call 12:52 : Third user call completes in 8m
このプロシージャは、capture_dir内で検出されたワークロード取得を処理します。
構文
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ( capture_dir IN VARCHAR2);
パラメータ
表145-10 PROCESS_CAPTUREプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ワークロード取得ディレクトリ・オブジェクトの名前(大/小文字が区別される)。ディレクトリ・オブジェクトは、適切な権限を持つ有効なOSディレクトリを指している必要があります。このディレクトリに新しいファイルが追加されます。(必須) |
使用上の注意
このサブプログラムはcapture_dir
で検出されたワークロード取得を分析し、指定したワークロード取得のリプレイに必要となる新しいワークロード・リプレイ固有のメタデータ・ファイルを作成します。これは新しいファイルを作成するだけであり、ワークロード取得中に最初に作成されたファイルは変更しません。したがって、このプロシージャは、プロシージャに予期しないエラーが発生したり、ユーザーによって取り消された場合などに、同じ取得ディレクトリで複数回実行できます。
このプロシージャが正常に実行されると、capture_dir
に存在する取得済ワークロードをリプレイするために、capture_dirをINITIALIZE_REPLAYプロシージャへの入力として使用できます。
特定のデータベース・バージョンでワークロード取得をリプレイする前に、このPROCESS_CAPTUREプロシージャを使用して、同じデータベース・バージョンで取得を処理しておく必要があります。処理済のワークロード取得を作成すると、取得されたワークロードを同じデータベース・バージョンでリプレイする場合に複数回使用できます。
たとえば、ワークロードfooがOracle Databaseバージョン10.2.0.5のrec_dir
で取得されたとします。 ワークロードfooをバージョン11.1.0.1でリプレイするには、このワークロードをバージョン11.1.0.1で処理する必要があります。 取得ディレクトリrec_dir
を処理するには、次のプロシージャを11.1.0.1のデータベースで実行する必要があります。
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE('rec_dir');
これで、rec_dir
に有効な11.1.0.1の処理済ワークロード取得が含まれます。この処理済ワークロード取得を使用して、ワークロードfooを11.1.0.1のデータベースで必要な回数だけリプレイできます。
このプロシージャは、ワークロードのリプレイ中にユーザー・セッションが希望の方法でデータベースに接続できるように、取得された接続を新しい接続に再マップします。
構文
DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION ( connection_id IN NUMBER, replay_connection IN VARCHAR2);
パラメータ
表145-11 REMAP_CONNECTIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
再マップする接続のID。 |
|
リプレイ中に使用する新しい接続文字列。 |
使用上の注意
デフォルトで、replay_connection
のインスタンスはNULL
と同じになります。 replay_connection
がNULL
(デフォルト)の場合、リプレイ・セッションは、リプレイ・クライアントのランタイム環境によって決定されるデフォルトのホストに接続します。そのため、取得時接続文字列が再マップされない場合、すべてのリプレイ・セッションはデフォルトのホストにのみ接続し、ワークロードをリプレイします。
有効なreplay_connection
は、接続識別子またはサービス・ポイントを指定する必要があります。 接続識別子(ネット・サービス名、データベース・サービス名、ネット・サービスの別名など)を指定する方法、および接続識別子を接続記述子に解決する場合に使用できる命名方法については、『Oracle Database Net Servicesリファレンス』を参照してください。
指定したconnection_id
に一致する行がない場合、エラーが戻されます。
後続のワークロード・リプレイで使用されるすべての接続文字列を確認したり、以前のワークロード・リプレイに使用された接続文字列の再マッピングを調べるには、DBA_WORKLOAD_CONNECTION_MAP
ビューを使用します。
このファンクションは、規定のワークロード・リプレイに関するレポートを生成します。
構文
DBMS_WORKLOAD_REPLAY.REPORT ( replay_id IN NUMBER, format IN VARCHAR2 ) RETURN CLOB;
パラメータ
表145-12 REPORTファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
レポートが必要なワークロード・リプレイのIDを指定します。(必須) |
|
レポートの書式を指定します。有効な値は |
戻り値
指定した形式で表示されたレポート本文。CLOB
として戻されます。
表145-13 Reportファンクションで使用される定数
定数 | 型 | 値 | 説明 |
---|---|---|---|
|
|
'HTML' |
HTMLバージョンのレポートを生成します。 |
|
|
'TEXT' |
テキスト・バージョンのレポートを生成するには、これを |
|
|
'XML' |
XMLバージョンのレポートを生成します。 |
このプロシージャは、一時停止しているワークロードのリプレイを再開します。
構文
DBMS_WORKLOAD_REPLAY.RESUME_REPLAY;
使用上の注意
前提条件: PAUSE_REPLAYプロシージャに対するコールがすでに発行されています。
このプロシージャは、ワークロードのリプレイを開始します。現在リプレイ・データベースに接続されているすべての外部リプレイ・クライアント(WRC)が自動的に通知され、それらのリプレイ・クライアント(WRC)は取得されたワークロードの発行を開始します。
構文
DBMS_WORKLOAD_REPLAY.START_REPLAY;
使用上の注意
前提条件は次のとおりです。
PAUSE_REPLAYプロシージャに対するコールがすでに発行されています。
取得されたワークロードを正確にリプレイできる十分な数の外部リプレイ・クライアント(WRC)が、すでに起動されています。 このような外部リプレイ・クライアントのステータスは、V$WORKLOAD_REPLAY_CLIENTS
を使用して監視できます。
取得されたワークロードを正確にリプレイするために必要なリプレイ・クライアントの数を決定するには、WRCのCALIBRATE
モードを使用します。次に例を示します。
$ wrc mode=calibrate replaydir=.