16 ワークロード・スケールアップの使用
16.1 ワークロード・スケールアップの概要
この項では、次のワークロード・スケールアップ・テクニックについて説明します。
関連項目:
データベース統合リプレイの通常の使用事例の詳細は、「データベース統合リプレイの使用事例」を参照してください
16.1.1 タイム・シフトについて
データベース・リプレイでは、取得したワークロードをリプレイする際にタイム・シフトを実行できます。このテクニックは、既存の取得済ワークロードにワークロードを追加し、一緒にリプレイして、システムに対するストレス・テストを実行したい場合に便利です。
たとえば、営業、CRMおよびDWの3つのアプリケーションから取得した3つのワークロードがあるとします。ストレス・テストを実行するには、これらの取得済ワークロードのピークを合わせ、データベース統合リプレイを使用して一緒にリプレイします。
関連項目:
-
タイム・シフトの使用方法の詳細は、「タイム・シフトの使用」を参照してください
-
ストレス・テストでのデータベース統合リプレイの使用方法の詳細は、「ストレス・テスト」を参照してください
16.1.2 ワークロードの縮小について
関連項目:
-
ワークロードの縮小の使用方法の詳細は、「ワークロードの縮小の使用」を参照してください
-
取得サブセットの詳細は、「取得サブセット」を参照してください
-
スケールアップ・テストでのデータベース統合リプレイの使用方法の詳細は、「スケールアップ・テスト」を参照してください
16.1.3 スキーマの再マッピングについて
データベース・リプレイでは、データベース・スキーマを再マッピングして、スケールアップ・テストを実行できます。このテクニックは、マルチテナント・アプリケーションなどの同じアプリケーションのインスタンスを複数デプロイする際や、既存のアプリケーションに新しいに地理的なエリアを追加するときに便利です。
たとえば、営業のアプリケーションのワークロードが1つあるとします。スケールアップ・テストを実行して存在する場合にホストのボトルネックを特定するには、テスト・システムに営業スキーマの複数のスキーマを設定します。
関連項目:
-
スキーマの再マッピングの使用方法の詳細は、「スキーマの再マッピングの使用」を参照してください
-
スケールアップ・テストでのデータベース統合リプレイの使用方法の詳細は、「スケールアップ・テスト」を参照してください
16.2 タイム・シフトの使用
このシナリオでは、次を想定しています。
-
最初のワークロードは、営業アプリケーションから取得します。
-
2つ目のワークロードは、ピーク時間が営業ワークロードの1時間前であるCRMアプリケーションから取得します。
-
3つ目のワークロードは、ピーク時間が営業ワークロードの30分前であるDWアプリケーションから取得します。
-
これらのワークロードのピークを合わせるために、リプレイ時にCRMワークロードに1時間の遅延を、DWワークロードには30分の遅延を追加してタイム・シフトを実行します。
このシナリオでタイム・シフトを実行するには、次の手順を実行します。
-
ストレス・テストを実行するリプレイ・システムで、取得したワークロードが保存されているルート・ディレクトリにディレクトリ・オブジェクトを作成します。
CREATE [OR REPLACE] DIRECTORY cons_dir AS '/u01/test/cons_dir';
-
取得した個々のワークロードを別のディレクトリに事前処理します。
-
営業ワークロードでは、次の手順を実行します。
-
ディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY sales AS '/u01/test/cons_dir/cap_sales';
-
営業アプリケーションから取得したワークロードがこのディレクトリに格納されていることを確認します。
-
ワークロードを事前処理します。
EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('SALES');
-
-
CRMワークロードには、次を実行します。
-
ディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY crm AS '/u01/test/cons_dir/cap_crm';
-
CRMアプリケーションから取得したワークロードがこのディレクトリに格納されていることを確認します。
-
ワークロードを事前処理します。
EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('CRM');
-
-
DWワークロードには、次の手順を実行します。
-
ディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY DW AS '/u01/test/cons_dir/cap_dw';
-
DWアプリケーションから取得したワークロードがこのディレクトリに格納されていることを確認します。
-
ワークロードを事前処理します。
EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('DW');
-
-
-
ルート・ディレクトリをリプレイ・ディレクトリに設定します。
EXEC DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY ('CONS_DIR');
-
リプレイ・スケジュールを作成し、ワークロード取得を追加します。
EXEC DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE ('align_peaks_schedule'); SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('SALES') FROM dual; SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CRM', 3600) FROM dual; SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('DW', 1800) FROM dual; EXEC DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE;
3,600秒(または1時間)の遅延がCRMワークロードに追加され、1,800秒の遅延(または30分)がDWワークロードに追加されます。
-
統合リプレイを初期化します。
EXEC DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY ('align_peaks_replay', 'align_peaks_schedule');
-
接続を再マッピングします。
-
DBA_WORKLOAD_CONNECTION_MAP
ビューに接続マッピング情報を問い合せます。SELECT schedule_cap_id, conn_id, capture_conn, replay_conn FROM dba_workload_connection_map;
-
接続を再マッピングします。
EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 1, conn_id => 1, replay_connection => 'inst1'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 1, conn_id => 2, replay_connection => 'inst1'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 2, conn_id => 1, replay_connection => 'inst2'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 2, conn_id => 2, replay_connection => 'inst2'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 3, conn_id => 1, replay_connection => 'inst3'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 3, conn_id => 2, replay_connection => 'inst3');
replay_connection
パラメータは、テスト・システムに定義したサービスを示します。 -
接続の再マッピングを確認します。
SELECT schedule_cap_id, conn_id, capture_conn, replay_conn FROM dba_workload_connection_map;
-
-
統合リプレイを準備します。
EXEC DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY;
-
リプレイ・クライアントを起動します。
-
必要なリプレイ・クライアントの数を見積もります。
wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_sales wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_crm wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_dw
-
必要なリプレイ・クライアントの数を判断するために出力を追加します。
統合したワークロードに含まれるワークロード取得ごとに、最低1つのリプレイ・クライアントを開始する必要があります。
-
このコマンドを繰り返し、必要な数のリプレイ・クライアントを起動します。
wrc username/password mode=replay replaydir=/u01/test/cons_dir
replaydir
パラメータは、ワークロード取得が格納されているルート・ディレクトリに設定されています。
-
-
統合リプレイを開始します。
EXEC DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY;
16.3 ワークロードの縮小の使用
このシナリオでは、次を想定しています。
-
元のワークロードは午前2時から午後8時まで取得され、3つの取得サブセットに縮小されました。
-
最初の取得のサブセットは、元のワークロードの午前2時から午後8時の部分です。
-
2つ目の取得のサブセットは、元のワークロードの午前8時から午後2時の部分です。
-
3つ目の取得のサブセットは、元のワークロードの午後2時から午後8時の部分です。
-
リプレイ時にワークロードを3倍にするために、3つの取得サブセットを同時にリプレイすることでワークロードの縮小が実行されます。
このシナリオでワークロードの縮小を実行するには、次の手順を実行します。
-
スケールアップ・テストを実行する計画のあるリプレイ・システムで、取得したワークロードが保存されているルート・ディレクトリにディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cons_dir AS '/u01/test/cons_dir';
-
元のワークロードが保存されているディレクトリにディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cap_monday AS '/u01/test/cons_dir/cap_monday';
-
取得サブセットを保存する予定のディレクトリにディレクトリ・オブジェクトを作成します。
-
最初の取得サブセットのディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cap_mon_2am_8am AS '/u01/test/cons_dir/cap_monday_2am_8am';
-
2つ目の取得サブセットのディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cap_mon_8am_2pm AS '/u01/test/cons_dir/cap_monday_8am_2pm';
-
3つ目の取得サブセットのディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cap_mon_2pm_8pm AS '/u01/test/cons_dir/cap_monday_2pm_8pm';
-
-
取得サブセットを作成します。
-
午前2時から午前8時の期間の1つ目の取得サブセットを生成します。
EXEC DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET ('CAP_MONDAY', 'CAP_MON_2AM_8AM', 'mon_2am_8am_wkld', 0, TRUE, 21600, FALSE, 1);
-
午前8時から午後2時の期間の2つ目の取得サブセットを生成します。
EXEC DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET ('CAP_MONDAY', 'CAP_MON_8AM_2PM', 'mon_8am_2pm_wkld', 21600, TRUE, 43200, FALSE, 1);
-
午後2時から午後8時の期間の3つ目の取得サブセットを生成します。
EXEC DBMS_WORKLOAD_REPLAY.GENERATE_CAPTURE_SUBSET ('CAP_MONDAY', 'CAP_MON_2PM_8PM', 'mon_2pm_8pm_wkld', 43200, TRUE, 0, FALSE, 1);
-
-
取得サブセットを事前処理します。
EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('CAP_MON_2AM_8AM'); EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('CAP_MON_8AM_2PM'); EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('CAP_MON_2PM_8PM');
-
ルート・ディレクトリをリプレイ・ディレクトリに設定します。
EXEC DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY ('CONS_DIR');
-
リプレイ・スケジュールを作成し、取得サブセットを追加します。
EXEC DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE ('monday_folded_schedule'); SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CAP_MON_2AM_8AM') FROM dual; SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CAP_MON_8AM_2PM') FROM dual; SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CAP_MON_2PM_8PM') FROM dual; EXEC DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE;
-
統合リプレイを初期化します。
EXEC DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY ( 'monday_folded_replay', 'monday_folded_schedule');
-
接続を再マッピングします。
-
DBA_WORKLOAD_CONNECTION_MAP
ビューに接続マッピング情報を問い合せます。SELECT schedule_cap_id, conn_id, capture_conn, replay_conn FROM dba_workload_connection_map;
-
接続を再マッピングします。
EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 1, conn_id => 1, replay_connection => 'inst1'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 1, conn_id => 2, replay_connection => 'inst1'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 2, conn_id => 1, replay_connection => 'inst2'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 2, conn_id => 2, replay_connection => 'inst2'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 3, conn_id => 1, replay_connection => 'inst3'); EXEC DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (schedule_cap_id => 3, conn_id => 2, replay_connection => 'inst3');
replay_connection
パラメータは、テスト・システムに定義したサービスを示します。 -
接続の再マッピングを確認します。
SELECT schedule_cap_id, conn_id, capture_conn, replay_conn FROM dba_workload_connection_map;
-
-
統合リプレイを準備します。
EXEC DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY;
-
リプレイ・クライアントを起動します。
-
必要なリプレイ・クライアントの数を見積もります。
wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_monday_2am_8am wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_monday_8am_2pm wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_monday_2pm_8pm
-
必要なリプレイ・クライアントの数を判断するために出力を追加します。
統合したワークロードに含まれるワークロード取得ごとに、最低1つのリプレイ・クライアントを開始する必要があります。
-
このコマンドを繰り返し、必要な数のリプレイ・クライアントを起動します。
wrc username/password mode=replay replaydir=/u01/test/cons_dir
replaydir
パラメータは、ワークロード取得が格納されているルート・ディレクトリに設定されています。
-
-
統合リプレイを開始します。
EXEC DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY;
16.4 スキーマの再マッピングの使用
このシナリオでは、次を想定しています。
-
営業アプリケーションから取得したワークロードが1つあります。
-
営業スキーマの複数のスキーマをリプレイ・システムに設定するために、取得したワークロードを複数回リプレイ・スケジュールに追加してユーザーを別のスキーマに再マッピングします。
このシナリオでスキーマの再マッピングを実行するには、次の手順を実行します。
-
スケールアップ・テストを実行する計画のあるリプレイ・システムで、取得したワークロードが保存されているルート・ディレクトリにディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cons_dir AS '/u01/test/cons_dir';
-
取得したワークロードが保存されているディレクトリにディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY cap_sales AS '/u01/test/cons_dir/cap_sales';
営業アプリケーションから取得したワークロードがこのディレクトリに格納されていることを確認します。
-
取得したワークロードを事前処理します。
EXEC DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE ('CAP_SALES');
-
ルート・ディレクトリをリプレイ・ディレクトリに設定します。
EXEC DBMS_WORKLOAD_REPLAY.SET_REPLAY_DIRECTORY ('CONS_DIR');
-
リプレイ・スケジュールを作成し、取得したワークロードを複数回追加します。
EXEC DBMS_WORKLOAD_REPLAY.BEGIN_REPLAY_SCHEDULE ('double_sales_schedule'); SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CAP_SALES') FROM dual; SELECT DBMS_WORKLOAD_REPLAY.ADD_CAPTURE ('CAP_SALES') FROM dual; EXEC DBMS_WORKLOAD_REPLAY.END_REPLAY_SCHEDULE;
-
統合リプレイを初期化します。
EXEC DBMS_WORKLOAD_REPLAY.INITIALIZE_CONSOLIDATED_REPLAY ( 'double_sales_replay', 'double_sales_schedule);
-
ユーザーを再マッピングします。
EXEC DBMS_WORKLOAD_REPLAY.SET_USER_MAPPING (2, 'sales_usr', 'sales_usr_2');
-
統合リプレイを準備します。
EXEC DBMS_WORKLOAD_REPLAY.PREPARE_CONSOLIDATED_REPLAY;
-
リプレイ・クライアントを起動します。
-
必要なリプレイ・クライアントの数を見積もります。
wrc mode=calibrate replaydir=/u01/test/cons_dir/cap_sales
-
必要なリプレイ・クライアントの数を判断するために出力を追加します。
統合したワークロードに含まれるワークロード取得ごとに、最低1つのリプレイ・クライアントを開始する必要があります。
-
このコマンドを繰り返し、必要な数のリプレイ・クライアントを起動します。
wrc username/password mode=replay replaydir=/u01/test/cons_dir
replaydir
パラメータは、ワークロード取得が格納されているルート・ディレクトリに設定されています。
-
-
統合リプレイを開始します。
EXEC DBMS_WORKLOAD_REPLAY.START_CONSOLIDATED_REPLAY;