查看: 26724|回复: 41

[精华] 11g新特性-重演(replay)

[复制链接]
论坛徽章:
2
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
跳转到指定楼层
1#
发表于 2007-12-16 23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
11g新特性-重演(replay)
· 作者 小荷||【转载时请务必以超链接形式标明文章原始出处和作者信息】
· 永久链接: http://www.oracleblog.cn/study-note/11g-new-feature-replay/ ·


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

11g可以将生产库的一些负载replay到测试库上,这就便于我们在测试上进行真实的重演现网的状态。otn上介绍是用em,其实很多dba还是喜欢用命令行吧,在这里简单介绍下replay的架构和其主要操作的步骤:
replay的架构:


前期准备:
创建和生产库逻辑结构类似的测试库:可以用rman、standby snapshot、exp/imp

一、捕获数据库负载
1.重启数据库(非必要选项)
2.建立负载过滤器
3.建立负载文件存储目录
4.开始捕获负载
5.停止捕获负载
6.导出捕获的负载AWR数据

二 预处理负载
建立重演的存储文件路径,传输文件到此路径。
将捕获文件转换为重演文件,此步骤耗时耗资源,请在需要重演的测试库上进行,不要在生产库上进行!!

三、重演负载
wrc用于模拟将原生产库上的客户端的负载请求,模拟到测试库上
1.将测试库的系统时间调整为和开始捕获生产库的时间(非必要选项)
2.关闭测试机上来自外界的影响:通过dblink的连接、外部表、目录对象、URL、email
3.建立wrc(Workload Replay Client):wrc用于模拟将原生产库上的客户端的负载请求,模拟到测试库,可以先校准wrc
4.初始化重演
5.重新配置连接
6.设置负载重演的选项
7.开启wrc重演
8.开始负载重演
9.结束负载重演
10.导出负载重演的AWR数据

四、分析重演的负载

下面我们就来进行实际的演练(AWR的相关知识和重演之后的分析不在此处介绍):
在生产库上:
1.建立负载过滤器
建立过滤器filter_test用于过滤掉user为system的规则:

  1. SQL> --create capture filter
  2. SQL> BEGIN
  3.   2  DBMS_WORKLOAD_CAPTURE.ADD_FILTER (
  4.   3  fname => 'filter_test',
  5.   4  fattribute => 'USER',
  6.   5  fvalue => 'SYSTEM');
  7.   6  END;
  8.   7  /

  9. PL/SQL procedure successfully completed.
复制代码

2.建立负载文件存储目录

  1. SQL> --create workload dir
  2. SQL> create directory test_dir as '/oradata/dir_for_testfile';

  3. Directory created.
复制代码

3.开始捕获负载
历时120秒,如果没有指定历时,需要使用FINISH_CAPTURE存储过程来停止。
注意2点:
(1).目录不能有其他文件!!!不然会报错15505:

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_CAPTURE.START_CAPTURE (name => 'peak_120s',
  3.   3  dir => 'TEST_DIR',
  4.   4  duration => 120);
  5.   5  END;
  6.   6  /
  7. BEGIN
  8. *
  9. ERROR at line 1:
  10. ORA-15505: cannot start workload capture because instance 1 encountered errors
  11. while accessing directory "/oradata/dir_for_testfile"
  12. ORA-06512: at "SYS.DBMS_WORKLOAD_CAPTURE", line 799
  13. ORA-06512: at line 2
复制代码

(2).dir => ‘DIR_NAME’此处需要大写,教材中是小写,会报错20222:

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_CAPTURE.START_CAPTURE (name => 'peak_120s',
  3.   3  dir => 'test_dir',
  4.   4  duration => 120);
  5.   5  END;
  6.   6  /
  7. BEGIN
  8. *
  9. ERROR at line 1:
  10. ORA-20222: Invalid DB State or Input. Input "test_dir" is not a valid DIRECTORY
  11. object!
  12. ORA-06512: at "SYS.DBMS_WORKLOAD_CAPTURE", line 783
  13. ORA-06512: at line 2
复制代码

正确的执行应该为:

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_CAPTURE.START_CAPTURE (name => 'peak_120s',
  3.   3  dir => 'TEST_DIR',
  4.   4  duration => 120);
  5.   5  END;
  6.   6  /

  7. PL/SQL procedure successfully completed
复制代码

4. 执行负载脚本test.sql

  1. SQL> conn hr/hr
  2. Connected.
  3. SQL> @/oradata/test.sql
复制代码

其中 test.sql为:

  1. [oracle@localdb oradata]$ cat test.sql

  2. declare
  3.   l_stmt varchar2(2000);
  4. begin
  5.   for ctr in 1..10000 loop
  6.      l_stmt := 'insert into xxx values (''''||
  7.      lpad(round(dbms_random.value(1,9999999999999999999)),20,0)||'''')';
  8.      dbms_output.put_line(l_stmt);
  9.      execute immediate l_stmt;
  10.      commit;
  11.   end loop;
  12. end;
  13. /
复制代码

5.可等待历时过后,或手工stop捕获:

  1. SQL> exec dbms_workload_capture.FINISH_CAPTURE();

  2. PL/SQL procedure successfully completed.
复制代码

6.导出捕获的负载AWR数据
(略)

——————————————————————-
在测试库上:
1.建立负载文件存储目录

  1. SQL> create directory test_dir as '/oradata/dir_for_testfile';

  2. Directory created.
复制代码

将生产库上的负载文件传输到测试库此目录

2.预处理负载。
注意要让SYSAUX有足够的空间剩余,不然会报错1658:

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE (capture_dir => 'TEST_DIR');
  3.   3  END;
  4.   4  /
  5. BEGIN
  6. *
  7. ERROR at line 1:
  8. ORA-01658: unable to create INITIAL extent for segment in tablespace SYSAUX
  9. ORA-06512: at "SYS.DBMS_WORKLOAD_REPLAY", line 1138
  10. ORA-06512: at line 2
复制代码

我们增大空间后再次处理:

  1. SQL> select file_name from dba_data_files where tablespace_name='SYSAUX';

  2. FILE_NAME
  3. --------------------------------------------------------------------------------
  4. /oradata/dfile/oralocal/sysaux01.dbf

  5. SQL> alter database datafile '/oradata/dfile/oralocal/sysaux01.dbf' resize 800m;

  6. Database altered.

  7. SQL> BEGIN
  8.   2  DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE (capture_dir => 'TEST_DIR');
  9.   3  END;
  10.   4  /

  11. PL/SQL procedure successfully completed.
复制代码

3.wrc校准:

  1. [oracle@localdb dir_for_testfile]$ wrc mode=calibrate replaydir=/oradata/dir_for_testfile

  2. Workload Replay Client: Release 11.1.0.6.0 - Production on Fri Dec 14 02:52:09 2007

  3. Copyright (c) 1982, 2007, Oracle.  All rights reserved.


  4. Report for Workload in: /oradata/dir_for_testfile
  5. -----------------------

  6. Recommendation:
  7. Consider using at least 1 clients divided among 1 CPU(s).

  8. Workload Characteristics:
  9. - max concurrency: 1 sessions
  10. - total number of sessions: 2

  11. Assumptions:
  12. - 1 client process per 50 concurrent sessions
  13. - 4 client process per CPU
  14. - think time scale = 100
  15. - connect time scale = 100
  16. - synchronization = TRUE
复制代码

4.初始化重演

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_REPLAY.INITIALIZE_REPLAY (replay_name => 'peak_120s',
  3.   3  replay_dir => 'TEST_DIR');
  4.   4  END;
  5.   5  /

  6. PL/SQL procedure successfully completed.
复制代码

5.设置负载重演的选项

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_REPLAY.PREPARE_REPLAY (synchronization => TRUE);
  3.   3  END;
  4.   4  /

  5. PL/SQL procedure successfully completed.
复制代码

6. wrc重演,在DBMS_WORKLOAD_REPLAY.START_REPLAY之前,会提示Wait for the replay to start

  1. [oracle@localdb dir_for_testfile]$ wrc system/oracle mode=replay replaydir=/oradata/dir_for_testfile

  2. Workload Replay Client: Release 11.1.0.6.0 - Production on Fri Dec 14 02:56:44 2007

  3. Copyright (c) 1982, 2007, Oracle.  All rights reserved.


  4. Wait for the replay to start (02:56:44)
复制代码

7.开始负载重演(由于wrc会一直等待,我们需要另开一个窗口执行)

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_REPLAY.START_REPLAY ();
  3.   3  END;
  4.   4  /

  5. PL/SQL procedure successfully completed.

  6. SQL>
复制代码

此时另一端wrc会出现:

  1. [oracle@localdb dir_for_testfile]$
  2. [oracle@localdb dir_for_testfile]$ wrc system/oracle mode=replay replaydir=/oradata/dir_for_testfile

  3. Workload Replay Client: Release 11.1.0.6.0 - Production on Fri Dec 14 02:56:44 2007

  4. Copyright (c) 1982, 2007, Oracle.  All rights reserved.


  5. Wait for the replay to start (02:56:44)

  6. Replay started (02:58:05)
复制代码

8.结束负载重演

  1. SQL> BEGIN
  2.   2  DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY ();
  3.   3  END;
  4.   4  /

  5.   
  6. PL/SQL procedure successfully completed.
复制代码

9.导出负载重演的AWR数据
(略)

四、分析重演的负载
(略)

检查测试库上,我们再检查一下是否10000行记录已经重演:

  1. [oracle@localdb dir_for_testfile]$ sqlplus hr/hr

  2. SQL*Plus: Release 11.1.0.6.0 - Production on Fri Dec 14 03:01:04 2007

  3. Copyright (c) 1982, 2007, Oracle.  All rights reserved.


  4. Connected to:
  5. Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  7. SQL> select count(*) from xxx;

  8.   COUNT(*)
  9. ----------
  10.      10000
复制代码

确实发现已经重演,重演时的负载如何,就需要通过后续的分析了,在这里不展开。

其他:
重演的注意点:
1.注意生产库和测试库的数据库版本要一致
2.有些客户端的请求不会被捕获,因此不能让重演:
■ Direct path load of data from external files using utilities such as SQL*Loader
■ Shared server requests (Oracle MTS)
■ Oracle Streams
■ Advanced replication streams
■ Non-PL/SQL based Advanced Queuing (AQ)
■ Flashback queries
■ Oracle Call Interface (OCI) based object navigations
■ Non SQL-based object access
■ Distributed transactions (any distributed transactions that are captured will be
replayed as local transactions)
■ Remote DESCRIBE and COMMIT operations

[ 本帖最后由 jimmyhe1981 于 2007-12-16 23:33 编辑 ]
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
2#
发表于 2007-12-16 23:31 | 只看该作者
关注一下。11g还没接触过。楼主加油啊

使用道具 举报

回复
论坛徽章:
7
3#
发表于 2007-12-17 06:40 | 只看该作者
谢谢分享

使用道具 举报

回复
论坛徽章:
19
生肖徽章:羊
日期:2006-09-06 21:18:482012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15CTO参与奖
日期:2009-02-12 11:45:48生肖徽章2007版:龙
日期:2008-12-16 14:04:41奥运会纪念徽章:篮球
日期:2008-10-24 13:29:38奥运会纪念徽章:沙滩排球
日期:2008-07-02 12:09:31生肖徽章2007版:鼠
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10
4#
发表于 2007-12-17 09:37 | 只看该作者
有时间我也测一把

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
5#
发表于 2007-12-17 09:56 | 只看该作者
如果截获负载期间日志量生成比较大以及sql 运行的次数很多…… 不知道这个文件会多大。

比如常规数据生成的归档有30G ,这个过程中每秒运行了7000次SQL 。这样得产生多大的文件,会不会对主数据库性能构成太大的影响。

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
6#
发表于 2007-12-17 10:32 | 只看该作者
建议移到新技术讨论板块……

使用道具 举报

回复
论坛徽章:
63
19周年集字徽章-19
日期:2020-09-23 02:43:002012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-02-18 11:42:472011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
7#
发表于 2007-12-18 14:52 | 只看该作者
这里用em还是要方便得多哟

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2008-2-3 18:28 | 只看该作者

挺好的东西

11g的特性相当不错了,不过命令行的方式技术员应该很好的掌握

使用道具 举报

回复
论坛徽章:
30
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2008-11-06 08:17:37数据库板块每日发贴之星
日期:2008-08-21 01:02:42NBA常规赛纪念章
日期:2008-04-18 19:48:162008新春纪念徽章
日期:2008-02-13 12:43:03数据库板块每日发贴之星
日期:2008-02-13 01:04:46数据库板块每日发贴之星
日期:2008-02-10 01:03:46数据库板块每日发贴之星
日期:2008-02-08 01:04:31数据库板块每日发贴之星
日期:2008-02-06 01:05:09祖国60周年纪念徽章
日期:2009-10-09 08:28:00
9#
发表于 2008-2-5 14:15 | 只看该作者
沒了解過11G,有空要看看了.

使用道具 举报

回复
论坛徽章:
6
嫦娥
日期:2006-04-13 09:55:49生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:532011新春纪念徽章
日期:2011-02-18 11:43:34ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:37
10#
发表于 2008-3-20 15:56 | 只看该作者
先顶个,再慢慢看~

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表