php数据重放,数据库负荷重放(Database replay)

从Oracle 11g开始支持数据库负荷重放(Database Replay)功能,通过捕获生产服务器上的工作负荷,然后在测试系统上重放工作负荷,以此来帮助评估测试系统上性能的变化,辅助解决性能问题。

使用Database Replay,需要执行四个主要步骤:

1)捕获工作负荷

2)预处理工作负荷

3)重放工作负荷

4)分析和报告

记录过程自身在生产系统上带来的开销极低。但是根据捕获时间的长短,需要保证拥有足够的磁盘空间来保存捕获的工作负荷。如果磁盘空间用尽,则捕获过程将停止。如果可能,务必在无活动会话时开始捕获过程。虽然可以捕获正在进行中的事务,但可能无法正常重放,因为这样只会在目标系统重放每个正在进行的事务的一部分。捕获操作不包含诸如SQL*Loader操作、Oracle流、闪回查询、OCI对象导航、非基于SQL的对象访问、远程describe和commit命令。

以下示范Database replay功能的使用:

一、生产库上的操作

1、用sys或system用户身份登录,创建用户、表和目录并授权:

sqlplus / as sysdba

grant dba to player

identified by player;

create table player.t1 as

select * from all_objects;

create directory play_d

as 'd:\play_d';

grant all on directory

play_d to public;

2、开始捕获,两个参数是自定义的捕获名称和保存捕获的Oracle目录:

exec

dbms_workload_capture.start_capture('cap1', 'PLAY_D');

3、以新的用户身份连接,运行生成数据库工作负荷的PL/SQL块:

connplayer/player

declare

m number;

begin

for i in 1 .. 1000 loop

select count(1) into m from t1 where

object_id = 1;

end loop;

end;

/

4、以sys或system用户身份连接,终止捕获并预处理捕获信息为可以在目标系统上重放的重放文件:

conn / as sysdba

exec

dbms_workload_capture.finish_capture;

exec

dbms_workload_replay.process_capture('PLAY_D');

二、测试库上的操作

1、用sys或system用户身份登录,创建用户、表和目录并授权,与生产库对应:

sqlplus / as sysdba

grant dba to player

identified by player;

create table player.t1 as

select * from all_objects;

create directory play_d

as 'd:\play_d';

grant all on directory

play_d to public;

2、将生产库play_d目录中的内容复制到测试库的play_d中。

3、重放的数据库状态准备:

exec

dbms_workload_replay.initialize_replay('cap1', 'PLAY_D');

exec

dbms_workload_replay.prepare_replay;

4、在操作系统命令提示符下启动重放客户端,重新创建所有客户端请求。一个重放客户端可以重放来自许多会话的语句:

C:\Users\Administrator>wrc

player/player replaydir=d:\play_d

Workload Replay Client:

Release 11.2.0.1.0 - Production on 星期五 1月 19 11:07:35 2018

Copyright (c) 1982, 2009,

Oracle and/or its affiliates.  All rights

reserved.

Wait for the replay to

start (11:07:35)

5、回到SQL*Plus中启动重放,这将允许创建的客户端开始运行捕获的工作负荷中的语句:

exec

dbms_workload_replay.start_replay;

6、检索重放报告:

首先获取ID:

select id,

capture_id, directory, start_time, end_time from dba_workload_replays;

ID CAPTURE_ID DIRECTORY                      START_TIME          END_TIME

---------- ----------

------------------------------ ------------------- -------------------

1          1 PLAY_D                         2018-01-19 03:08:54

执行检索,可以生成HTML格式的文件或者生成TEXT格式的文件:

spool

d:\play_d\report.html

select

dbms_workload_replay.report(1, 'HTML') from dual;

spool off

根据需要,也可以用以下PL/SQL程序检索和生成报告:

declare

capt_dir_id number;

curr_replay_id number;

replay_report  clob;

begin

capt_dir_id :=

dbms_workload_replay.get_replay_info(dir => 'PLAY_D');

select max(id)

into curr_replay_id

from dba_workload_replays

where capture_id = capt_dir_id;

replay_report :=

dbms_workload_replay.report(replay_id => curr_replay_id,

format    =>

dbms_workload_replay.type_text);

end;

/

研究生成的报告,注意Replay和Capture的DB Time值:

20de8cf95b95b657c2d5aa999bd2d46e.png

7、以player用户身份连接,向表中添加一个主键约束:

conn

player/player

alter table t1 add

constraint t1_pk primary key(object_id);

8、重复3、4、5、6步骤,观察重放报告中DB Time值的变化,说明定义约束后性能的提高。

9、使用delete_replay_info过程删除重放目录中的报告,参数中指定需要删除的报告ID:

exec

dbms_workload_replay.delete_replay_info(1);

10、清理测试用户和目录:

drop user

player cascade;

drop directory

play_d;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值