ワークロード再生

(8.0.28)
https://mita2db.hateblo.jp/entry/2020/08/30/193650
https://github.com/Percona-Lab/query-playback

 

Percona Playback

ソースDB: mmm066
ターゲットDB: mmm128


-- 1. Percona Playbackインストール[mmm128で実行]

git clone https://github.com/Percona-Lab/query-playback.git
yum -y install tbb tbb-devel cmake boost boost-devel gcc gcc-c++ doxygen mysql-community-devel mysql-community-libs-compat


cd query-playback
mkdir build_dir
cd build_dir
cmake -DMYSQL_LIB=/usr/lib64/mysql/libmysqlclient.so -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
make
make test
make install

 

-- 2. ワークロード記録[mmm066で実行]

vim /etc/my.cnf

general_log=1
general_log_file="/var/lib/mysql/general.log"


systemctl restart mysqld

show variables like '%log%';


-- 3. ワークロード実行[mmm066で実行]

select concat('delete from ',table_name,';') from information_schema.tables where table_schema=database();

 


-- 4. ワークロードが記録された一般クエリログをコピー

scp /var/lib/mysql/general.log mmm128:/var/lib/mysql

 

-- 5. ワークロード再実行[mmm128で実行]

/usr/local/bin/percona-playback \
--input-plugin general-log \
--general-log-file /var/lib/mysql/general.log \
--mysql-host localhost \
--mysql-user root \
--mysql-password 'password' \
--mysql-schema test \
--mysql-max-retries=0

 

(19c)
https://docs.oracle.com/cd/F19136_01/ratug/database-replay.html#GUID-C5CAF3E6-0F1C-4BD6-BC03-F71744AD600E
https://qiita.com/ts_carp/items/da4d4a4488568231a63f

データベース・ワークロードのリプレイ

ソースDB: mmm065
プレイクライアント: mmm127
ターゲットDB: mmm128


-- 1.ワークロードの取得[mmm065での作業]


-- 作業ディレクトリ作成(OS)

mkdir /home/oracle/cap_dir


-- 作業ディレクトリ作成
-- CDBに接続
conn / as sysdba

create or replace directory cap_dir as '/home/oracle/cap_dir';

 

-- フィルター作成
BEGIN
  DBMS_WORKLOAD_CAPTURE.ADD_FILTER (
                           fname => 'FILTER01',
                           fattribute => 'USER',
                           fvalue => 'TEST');
END;
/

select * from DBA_WORKLOAD_FILTERS;


-- キャプチャ開始
BEGIN
   DBMS_WORKLOAD_CAPTURE.START_CAPTURE (
                       NAME => 'CAPTURE01',
                       DIR => 'CAP_DIR',
                       DEFAULT_ACTION => 'EXCLUDE',
                       PLSQL_MODE => 'EXTENDED');
END;
/


select * from DBA_WORKLOAD_CAPTURES;
select id,AWR_BEGIN_SNAP,AWR_END_SNAP from dba_workload_captures;


-- ワークロード実行
-- PDBに接続
conn test/test@pdb1


select 'delete from ' || table_name || ';' from user_tables;

 

-- キャプチャ停止
-- CDBに接続
conn / as sysdba

BEGIN
  DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE();
END;
/


-- 2. ワークロードの事前処理[mmm128での作業]

-- ソースDBからターゲットDBへcap_dirをコピー

cd
tar cvzf cap_dir.tgz cap_dir

scp cap_dir.tgz mmm128:/home/oracle

cd
tar xvzf cap_dir.tgz

 

-- 作業ディレクトリ作成
-- CDBに接続
conn / as sysdba

create or replace directory cap_dir as '/home/oracle/cap_dir';


-- ワークロードの前処理
begin
 DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE(capture_dir => 'CAP_DIR');
END;
/


wrc mode=calibrate replaydir=/home/oracle/cap_dir


-- 3. ワークロードのリプレイ[ほぼmmm128での作業]

-- ターゲットDBからクライアントへcap_dirをコピー

cd
tar cvzf cap_dir.tgz cap_dir

scp cap_dir.tgz mmm127:/home/oracle

cd
tar xvzf cap_dir.tgz

 

-- リプレイ初期化
-- CDBに接続
conn / as sysdba

 

BEGIN
  DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY (replay_name => 'REPLAY01', replay_dir => 'CAP_DIR');
END;
/

-- 接続の再マッピング

select * from dba_workload_connection_map;


BEGIN
  DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION(connection_id => 1,
                        replay_connection => 'mmm128:1521/pdb1.example.com' );
END;
/

select * from dba_workload_connection_map;


-- リプレイ準備
BEGIN
  DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY (synchronization => TRUE,
                           connect_time_scale => 100,
                           think_time_scale => 100,
                           think_time_auto_correct => TRUE,
                           capture_sts => FALSE);
END;
/

select * from dba_workload_replays;

 

-- リプレイクライアントの起動[mmm127での作業]
-- CDBに接続

wrc system/oracle@mmm128:1521/orcl.example.com mode=replay replaydir=/home/oracle/cap_dir


-- リプレイ開始
-- CDBに接続

conn / as sysdba

BEGIN
  DBMS_WORKLOAD_REPLAY.START_REPLAY();
END;
/

select * from dba_workload_replays;

 

-- 結果確認
-- PDBに接続
conn test/test@pdb1

select count(*) from tab1;
select count(*) from tab100;

 

--4. 分析およびレポート[mmm128での作業]

-- CDBに接続
conn / as sysdba

select * from dba_workload_replays;

set long 400000
set longchunksize 400000

select dbms_workload_replay.report( 1, 'TEXT') report from dual;

 

 

 

(14)

https://qiita.com/oyamata/items/915a391268c5600bbe24
https://github.com/laurenz/pgreplay

pgreplay

ソースDB: mmm070
ターゲットDB: mmm172

 


-- 1. pgreplay インストール[mmm172で実行]

su - postgres

git clone https://github.com/laurenz/pgreplay.git
cd pgreplay

./configure --with-postgres=/usr/pgsql-14/bin

make PG_CONFIG=/usr/pgsql-14/bin/pg_config
sudo make PG_CONFIG=/usr/pgsql-14/bin/pg_config  install

 

/usr/pgsql-14/bin/pgreplay -v

 

-- 2. ワークロード記録[mmm070で実行]
su - postgres

mkdir -p /var/lib/pgsql/pgreplay_log

vim $PGDATA/postgresql.conf


log_directory = '/var/lib/pgsql/pgreplay_log'
log_min_messages = error
log_min_error_statement = log
log_connections = on
log_disconnections = on
log_line_prefix = '%m|%u|%d|%c|'
log_statement = 'all'
log_destination = 'csvlog'

 

 


sudo systemctl restart postgresql-14


-- 3. ワークロード実行[mmm070で実行]
psql test
\pset pager 0

select 'delete from ' || tablename || ' ;' from pg_tables where schemaname = 'public';


-- 4. ワークロードが記録されたPostgreSQLログファイルをコピー

cd
tar cvzf pgreplay_log.tgz pgreplay_log
scp pgreplay_log.tgz mmm172:/var/lib/pgsql

cd
tar xvzf pgreplay_log.tgz

 

 

-- 5. ワークロード再実行[mmm172で実行]

/usr/pgsql-14/bin/pgreplay \
-c \
-j \
-b "2022-03-25 22:33:00.000 JST" \
-e "2022-03-25 22:35:00.000 JST" \
-D test \
/var/lib/pgsql/pgreplay_log/postgresql-Fri.csv

 

 

(2014)

https://docs.microsoft.com/ja-jp/sql/tools/distributed-replay/sql-server-distributed-replay?view=sql-server-ver15
https://blog.engineer-memo.com/2011/11/04/sql-server-2012-ctp3-%E3%81%AE-distributed-replay-%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/
https://stackoverflow.com/questions/61892063/cannot-find-dreplay-exe-for-sql-server-2019
https://www.sqlshack.com/how-to-install-configure-and-use-sql-server-distributed-replay/


2019の場合、[機能の選択] ページに[管理ツール - 基本] がなく、下記がインストール不可の模様。CLIでも不可
DReplay.exe
DReplay.exe.preprocess.config
DReplay.exe.replay.config

2017や2016も同様

 

ADドメイン名: contoso.com

mmm191: 分散再生コントローラ、ドメインコントローラ、トレース取得サーバ
mmm192: 分散再生クライアント
mmm193: ターゲットサーバ


1. ActiveDirecotryのインストール[mmm191]
  サーバの役割の追加から「ActiveDirecotryドメインサービス」を追加
  「このサーバーをドメインコントローラーに昇格する」で、ドメインコントローラーに昇格

2. ドメインへの参加[mmm192,mmm193]
  mmm192,mmm193のDNSとしてADマシンのIPを指定
  システムのプロパティからドメインに参加

3. SQL Server実行ユーザーの作成[mmm191]
  ActiveDirectoryユーザーとコンピューターから、ユーザー(sqlservice)を追加
  データベースエンジンや分散再生のサービスアカウントとして使用する

  所属するグループ:Administrators,Domain Users


4. SQLサーバのインストール[mmm191,mmm192,mmm193] 

mmm191 →

機能: データベースエンジンサービス、分散再生コントローラー、管理ツール
認証モード: Windows 認証モード
SQL Server管理者: Administrator
分散再生コントローラーの権限を持つユーザ: sqlservice


mmm192 →

機能: 分散再生クライアント、管理ツール

分散再生クライアント: 
  コントローラー名: mmm191
  作業ディレクトリ: C:\Program Files (x86)\Microsoft SQL Server\DReplayClient\WorkingDir\
  結果ディレクトリ: C:\Program Files (x86)\Microsoft SQL Server\DReplayClient\ResultDir\


mmm193 →
機能: データベースエンジンサービス、管理ツール
認証モード: Windows 認証モード
SQL Server管理者: Administrator

 

5. ターゲットサーバDBのログインにsqlserviceアカウント追加[mmm193] 

After you install the SQL Server Distributed Replay client service on a set of computers, 
the security principal used for those service accounts must be granted the sysadmin server role 
on the instance of SQL Server that you intend to replay the trace workload against. 
This step is not performed automatically during Distributed Replay Setup.


ログインとしてsqlserviceを追加し、sysadminサーバーロールを追加する

USE [master]
GO
CREATE LOGIN [CONTOSO\sqlservice] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [CONTOSO\sqlservice]
GO

 

6. DCOM 権限の設定[mmm191]

dcomcnfg.exe

コンポーネントサービス→コンピューター→マイコンピューター→DCOMの構成

DReplayControllerのプロパティ→セキュリティタブ


sqlserviceアカウントとAdministratorアカウントに対して下記を許可する

起動とアクティブ化のアクセス許可
  ローカルからの起動
  リモートからの起動
  ローカルからのアクティブ化
  リモートからのアクティブ化

アクセス許可
  ローカルアクセス
  リモートアクセス

 

 


7. 分散再生コントローラの設定[mmm191]

SQL Server Distributed Replay Controllerサービスを起動。
MSSQLSERVERサービスを起動。(自動で起動できない。ドメインコントローラの影響か)


notepad "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\DReplayController\DReplayController.config"

デフォルトから変更なし

<?xml version="1.0" encoding="utf-8"?>
<Options>
    <LoggingLevel>CRITICAL</LoggingLevel>
</Options>


notepad "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\DReplay.Exe.Preprocess.config"

デフォルトから変更なし

<?xml version="1.0" encoding="utf-8"?>
<Options>
    <PreprocessModifiers>
        <IncSystemSession>No</IncSystemSession>
        <MaxIdleTime>-1</MaxIdleTime>
    </PreprocessModifiers>
</Options>

cd "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn"
Dreplay.exe status -m mmm191.contoso.com

 

8. 分散再生クライアントの設定[mmm192]

SQL Server Distributed Replay Clientサービスを起動。


notepad "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\DReplayClient\DReplayClient.config"

デフォルトから変更なし

<?xml version="1.0" encoding="utf-8"?>
<Options>
  <Controller>mmm191.contoso.com</Controller>
  <WorkingDirectory>C:\Program Files (x86)\Microsoft SQL Server\120\Tools\DReplayClient\WorkingDir\</WorkingDirectory>
  <ResultDirectory>C:\Program Files (x86)\Microsoft SQL Server\120\Tools\DReplayClient\ResultDir\</ResultDirectory>
  <LoggingLevel>CRITICAL</LoggingLevel>
</Options>


notepad "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\DReplay.Exe.Replay.config"

Serverパラメータを修正

<?xml version="1.0" encoding="utf-8"?>
<Options>
    <ReplayOptions>
        <Server>mmm193</Server>
        <SequencingMode>stress</SequencingMode>
        <ConnectTimeScale>100</ConnectTimeScale>
        <ThinkTimeScale>100</ThinkTimeScale>
        <HealthmonInterval>60</HealthmonInterval>
        <QueryTimeout>3600</QueryTimeout>
        <ThreadsPerClient>255</ThreadsPerClient>
        <EnableConnectionPooling>No</EnableConnectionPooling>
        <StressScaleGranularity>SPID</StressScaleGranularity>
    </ReplayOptions>
    <OutputOptions>
        <ResultTrace>
            <RecordRowCount>Yes</RecordRowCount>
            <RecordResultSet>No</RecordResultSet>
        </ResultTrace>
    </OutputOptions>
</Options>

 

cd "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn"
Dreplay.exe status -m mmm191.contoso.com

 


9. DBの設定

トレース取得サーバで
テスト用のデータベース、テーブル、データを作成し、DBバックアップを取得

create database test;

 

backup database test
to disk = 'C:\backup\bk01.bak'
with format,
     medianame = 'bk01',
     name = 'bk01';

 


ターゲットサーバでリストア

restore database test
from disk = 'C:\backup\bk01.bak'
with recovery;

 

 

10. トレースの取得[mmm191]


負荷をかけながら
TSQL_Replayテンプレートを使用してSQL Server Profilerでトレースを取得

※TSQLのイベントを追加する

 

11. トレースの変換[mmm191]

mkdir C:\temp

cd "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn"
Dreplay.exe preprocess -m mmm191.contoso.com -i C:\temp\test.trc -d C:\temp

下記ファイルが作成される

TraceStats.xml
ReplayEvents.irf

 

12. トレースの再生[mmm191]

cd "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn"
Dreplay.exe replay -m mmm191.contoso.com -d C:\temp -o -w "MMM192" -s "MMM193"