目录结构
注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:
1、达梦数据库产品及解决方案,点击前往
2、达梦技术文档,点击前往
3、武汉达梦数据库有限公司 官网首页,点击前往
1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)
DM数据库Real Application Testing之Database Reply实操
- 文章快速说明索引
- 数据库回放的演示
- 负载捕获
- 数据回放
文章快速说明索引
学习目标:
目的:前面我们分享过Oracle的RAT的相关实操,接下来看一下DM数据库Real Application Testing之Database Reply实操!
学习内容:(详见目录)
1、DM数据库Real Application Testing之Database Reply实操
学习时间:
2023年03月24日 23:45:56
学习产出:
1、DM数据库Real Application Testing之Database Reply实操
2、CSDN 技术博客 1篇
注:下面我们所有的学习环境是Centos7+DM V7
SQL> select * from v$version;
行号 BANNER
---------- -------------------------------------------------------------
1 DM Database Server x64 V7.6.0.60-Build(2018.04.17-91260)ENT
2 DB Version: 0x7000a
已用时间: 2.989(毫秒). 执行号:3.
SQL>
数据库回放的演示
官方文档:
数据库重演(Database Replay)是 DM 中用来重现、定位和分析问题的一个重要手段,其基本原理是在数据库系统上捕获所有负载(记录外部客户端对服务器的请求),保存到二进制捕获文件,然后通过 DM 提供的数据库重演工具将捕获文件中的请求发送给捕获前由原始数据库备份恢复而来的重演测试系统上,从而帮助重现当时的场景。
准备工作,如下:
[dmdba@dbserver ~]$ cd dmdbms/
bin/ bin2/ data/ desktop/ doc/ drivers/ include/ jar/ jdk/ log/ samples/ script/ tool/ uninstall/ web/
[dmdba@dbserver ~]$ cd dmdbms/tool/
[dmdba@dbserver tool]$ ls
analyzer backup.xml console dbca.sh dmagent dropins dts.bmp log4j.xml manager.bmp monitor.bmp p2 restore.xml startWebServer.sh templates
analyzer.bmp configuration console.bmp disql dmservice.sh dts dts_cmd_run.sh manager monitor nca.sh plugins server_connection.xml stopWebServer.sh workspace
[dmdba@dbserver tool]$
[dmdba@dbserver tool]$ ./dmservice.sh
[dmdba@dbserver tool]$
[dmdba@dbserver tool]$ cd
[dmdba@dbserver ~]$ cd dmdbms/bin
[dmdba@dbserver bin]$ ls
asmtest DmAuditMonitorService dmlcvt dmshp2st libdmasmapi.so libdmcalc.so libdmdcp.so libdmimon_dll_java.so libdmmsg_parse.so libdmrarch.so libdmscp.so libdmwmon.so libphp54ts_dm.so php54_pdo_dm.so
bin dmbackup dmmdf dmst2shp libdmasmparse.so libdmcfg.so libdmdcr.so libdmimon.so libdmmsg.so libdmreadline.so libdmsess.so libdmwseg.so libphp55_dm.so php54ts_pdo_dm.so
cexe dmcss dmmonitor dmwatch libdmasm.so libdmckpt.so libdmdct.so libdmjmon.so libdmnci.so libdmredo.so libdmshm.so libdmxa.so libphp55ts_dm.so php55_pdo_dm.so
client_ssl dmcssm dmmppmon dmwatcher libdmasvr.so libdmclientlex.so libdmde.so libdmjob.so libdmnlssort.so libdmregex.so libdmshpldr.so libdodbc.so libphp56_dm.so php55ts_pdo_dm.so
dclone dmctlcvt dmmppwatch dmwmon libdmaud.so libdmcomm.so libdmdpc.so libdmjson.so libdmnsort.so libdmrep.so libdmstg.so libdwatcher.so libphp56ts_dm.so php56_pdo_dm.so
dexp dmdata_cmp DM_PIPE_DMAP_LSNR_RD dpc_new libdmbackup.so libdmcpr.so libdmdpi.so libdmknl.so libdmocci.so libdmrlog.so libdmstrt.so libdwctl.so libsnappy.so php56ts_pdo_dm.so
dimp dmdbchk DM_PIPE_DMAP_LSNR_WR dreplay libdmbak2.so libdmcpt.so libdmdta.so libdmlic.so libdmoci.so libdmrman.so libdmsys.so libdwmon.so libssl.so pids
disql dmdbg dmrachk jexe libdmbak.so libdmcrypt.so libdmdw.so libdmllog.so libdmoopi.so libdmrps.so libdmtbl.so libgeos_c.so libxerces-c-3.1.so rac_reinit
dmamon dmdcrs dmrdc jobdts libdmbcast2.so libdmcssmon.so libdmelog.so libdmlnk.so libdmopt.so libdmrs.so libdmtimer.so libgeos.so libxerces-c.so server_ssl
dmamon_ctl dmfldr dmrestore lib libdmbcast.so libdmcss.so libdmexe.so libdmlogmnr_client.so libdmos.so libdmrtree.so libdmtrc.so libphp52_dm.so libxqilla.so service_template
dmap dmimon dmrman libcrypto.so libdmbifun.so libdmcti.so libdmfil.so libdmlogmnr.so libdmpara.so libdmrwm.so libdmtrv.so libphp52ts_dm.so libz.so svc_clt_linux.log
DmAPService dminit dmrwm libcyt_java.so libdmblb.so libdmcvt.so libdmfldr_comm.so libdmmal.so libdmp_disql_dll_java.so libdmrww.so libdmtrx.so libphp53_dm.so php52_pdo_dm.so svc_ctl_linux
dmasmcmd DmInstanceMonitorService dmrww libdisql_dll.so libdmbldr.so libdmcyt.so libdmfldr_dll_java.so libdmmem.so libdmp_dll.so libdmsbtex.so libdmuthr.so libphp53_mysql.so php52ts_pdo_dm.so SYSWORD.UTF8.LIB
dmasmsvr dmjmon dmserver libdmamon.so libdmbrtsk.so libdmdbg.so libdmfldr.so libdmmout.so libdmpif.so libdmsbtree.so libdmutl.so libphp53ts_dm.so php53_pdo_dm.so
dmasmtool DmJobMonitorService DmServiceDMSERVER libdmapx.so libdmbtr.so libdmdci.so libdmhfs.so libdmmppmon.so libdmrac.so libdmsbt.so libdmvtdsk.so libphp54_dm.so php53ts_pdo_dm.so
[dmdba@dbserver bin]$ ./disql
disql V7.6.0.60-Build(2018.04.17-91260)ENT
用户名:sysdba
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.396(毫秒)
Connected to: DM 7.1.6.60
SQL> select * from v$version;
行号 BANNER
---------- -------------------------------------------------------------
1 DM Database Server x64 V7.6.0.60-Build(2018.04.17-91260)ENT
2 DB Version: 0x7000a
已用时间: 2.989(毫秒). 执行号:3.
SQL>
负载捕获
指定生成重演文件路径和重演时间,-1代表重演由用户手动停止,如下:
SQL> call sp_start_capture('/home/dmdba/dbreplay/replay.rec',-1);
DMSQL 过程已成功完成
已用时间: 2.924(毫秒). 执行号:4.
SQL> create table replay_tbl (id number,name varchar(16));
操作已执行
已用时间: 6.348(毫秒). 执行号:5.
SQL> insert into replay_tbl values (1,'1');
影响行数 1
已用时间: 0.686(毫秒). 执行号:6.
SQL> insert into replay_tbl values (2,'2');
影响行数 1
已用时间: 0.770(毫秒). 执行号:7.
SQL> insert into replay_tbl values (3,'3');
影响行数 1
已用时间: 0.815(毫秒). 执行号:8.
SQL> select * from replay_tbl;
行号 ID NAME
---------- -- ----
1 1 1
2 2 2
3 3 3
已用时间: 0.832(毫秒). 执行号:9.
SQL> insert into replay_tbl values (4,'4');
影响行数 1
已用时间: 0.681(毫秒). 执行号:10.
SQL> insert into replay_tbl values (5,'5');
影响行数 1
已用时间: 0.929(毫秒). 执行号:11.
SQL> delete from replay_tbl where id < 3;
影响行数 2
已用时间: 1.388(毫秒). 执行号:12.
SQL> commit;
操作已执行
已用时间: 1.341(毫秒). 执行号:13.
SQL> call sp_stop_capture();
DMSQL 过程已成功完成
已用时间: 101.440(毫秒). 执行号:14.
SQL>
如上:
- 系统过程 sp_start_capture 来启动捕获发往数据库的所有负载,并将该阶段收到的所有请求保存到二进制捕获文件中
- 系统过程 sp_stop_capture 可以停止捕获
捕获二进制文件,如下:
[dmdba@dbserver dbreplay]$ ls
replay.rec
[dmdba@dbserver dbreplay]$ ll
总用量 8
-rw-rw-r-- 1 dmdba dmdba 5610 3月 25 00:06 replay.rec
[dmdba@dbserver dbreplay]$
二进制文件内容,如下:
注:后面我们借助于一些工具详细看一下其底层逻辑!
数据回放
DM的数据回放是利用其提供的dreplay工具来重演数据,如下:
[dmdba@dbserver bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@dbserver bin]$
[dmdba@dbserver bin]$ ls dreplay
dreplay
[dmdba@dbserver bin]$ ll dreplay
-rwxr-xr-x. 1 dmdba dmdba 26980 12月 8 2021 dreplay
[dmdba@dbserver bin]$
[dmdba@dbserver bin]$ ./dreplay help
dreplay V7.6.0.60-Build(2018.04.17-91260)ENT
格式: ./dreplay KEYWORD=value
例程: ./dreplay SERVER=LOCALHOST:5236 FILE=./test.cpt
必选参数: FILE
关键字 说明(默认值)
--------------------------------------------------------------------------------
SERVER 需要连接的服务器 格式 SERVER:PORT(LOCALHOST:5236)
FILE 捕获文件完整路径
HELP 打印帮助信息
[dmdba@dbserver bin]$
我们这里使用一台机器即可,如下:
SQL> drop table replay_tbl;
操作已执行
已用时间: 60.013(毫秒). 执行号:15.
SQL> commit;
操作已执行
已用时间: 0.247(毫秒). 执行号:16.
SQL>
下面开始回放,如下:
[dmdba@dbserver bin]$ ./dreplay server=localhost:5236 file=/home/dmdba/dbreplay/replay.rec
dreplay V7.6.0.60-Build(2018.04.17-91260)ENT
1 of 11 operation start...
1 of 11 operation succeed...
2 of 11 operation start...
2 of 11 operation succeed...
3 of 11 operation start...
3 of 11 operation succeed...
4 of 11 operation start...
4 of 11 operation succeed...
5 of 11 operation start...
5 of 11 operation succeed...
6 of 11 operation start...
6 of 11 operation succeed...
7 of 11 operation start...
7 of 11 operation succeed...
8 of 11 operation start...
8 of 11 operation succeed...
9 of 11 operation start...
9 of 11 operation succeed...
10 of 11 operation start...
10 of 11 operation succeed...
11 of 11 operation start...
11 of 11 operation succeed...
replay successfully
[dmdba@dbserver bin]$
查看如下:
SQL> select * from replay_tbl;
行号 ID NAME
---------- -- ----
1 3 3
2 4 4
3 5 5
已用时间: 0.251(毫秒). 执行号:27.
SQL>