Oracle SQL REPLAY

Steps for SQL REPLAY 

  1. Collect Sqls
  2. Create the SQL Replay Task with SQL Tuning Set (STS)
  3. Collect SQL Performance Before Changes
  4. Make Database Change ( eg collect stats etc)
  5. Collect SQL Performance After Changes
  6. Comparing SQL Performance Before and After Change
  7. Display the Results of a SQL Replay Task

 1.Collect SQLs.

 

We can collect the sql from the cursor cache and AWR.

 

from the cursor cache:

SQL> conn henry/henry
已连接。
SQL> exec dbms_sqltune.create_sqlset ('MYSQLSET');

PL/SQL 过程已成功完成。

SQL> DECLARE
  2
  3      cur dbms_sqltune.sqlset_cursor;
  4
  5  BEGIN
  6
  7           OPEN cur FOR
  8            SELECT VALUE(p)
  9             FROM TABLE (dbms_sqltune.select_cursor_cache) p;
 10
 11          dbms_sqltune.load_sqlset(
 12                                            sqlset_name => 'MYSQLSET',
 13                                           populate_cursor => cur);
 14
 15  END;
 16  /

PL/SQL 过程已成功完成。

 

from the AWR.

SQL> DECLARE
  2      cur DBMS_SQLTUNE.SQLSET_CURSOR;
  3  BEGIN
  4
  5    OPEN cur FOR
  6      SELECT VALUE(P)
  7        FROM table(
  8          DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(1,100)) P;
  9
 10         DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'MYSQLSET',
 11                           populate_cursor => cur,
 12                             load_option => 'MERGE',
 13                             update_option => 'ACCUMULATE');
 14  END;
 15  /
DECLARE
*
第 1 行出现错误:
ORA-13768: 快照 ID 必须介于 231 和 355 之间。
ORA-06512: 在 "SYS.DBMS_SQLTUNE", line 4561
ORA-06512: 在 line 10


SQL> ed
已写入 file afiedt.buf

  1  DECLARE
  2      cur DBMS_SQLTUNE.SQLSET_CURSOR;
  3  BEGIN
  4    OPEN cur FOR
  5      SELECT VALUE(P)
  6        FROM table(
  7          DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(231,354)) P;
  8         DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'MYSQLSET',
  9                           populate_cursor => cur,
 10                             load_option => 'MERGE',
 11                             update_option => 'ACCUMULATE');
 12* END;
 13  /

PL/SQL 过程已成功完成。

 

 2.Create the SQL Replay Task with SQL Tuning Set (STS)

 

SQL> ed
已写入 file afiedt.buf

  1  declare
  2      l_task_id varchar2(20);
  3  begin
  4  l_task_id := dbms_sqltune.create_tuning_task (
  5                       sqlset_name => 'MYSQLSET',
  6                      task_name => 'MY_REPLAY_TASK');
  7* end;
SQL> /
declare
*
第 1 行出现错误:
ORA-13607: 指定的任务或对象 MY_REPLAY_TASK 已存在
ORA-06512: 在 "SYS.DBMS_SQLTUNE_INTERNAL", line 7718
ORA-06512: 在 "SYS.PRVT_SQLADV_INFRA", line 275
ORA-06512: 在 "SYS.DBMS_SQLTUNE", line 674
ORA-06512: 在 line 4


SQL> ed
已写入 file afiedt.buf

  1  declare
  2      l_task_id varchar2(20);
  3  begin
  4  l_task_id := dbms_sqltune.create_tuning_task (
  5                       sqlset_name => 'MYSQLSET',
  6                      task_name => 'MY_REPLAY_TASK1');
  7* end;
SQL> /

PL/SQL 过程已成功完成。

 

  3.Collect SQL Performance Before Changes

 

SQL> begin
  2      dbms_sqltune.execute_tuning_task (
  3                                execution_name => 'MY_REPLAY_EXECUTE_BEFORE',
  4                               task_name => 'MY_REPLAY_TASK1');
  5  end;
  6  /

PL/SQL 过程已成功完成。

 

4.Make Database Change

 

SQL> alter system set "_b_tree_bitmap_plans" = false;

系统已更改。

SQL> alter system set optimizer_index_cost_adj=1;

系统已更改。

 

5.Collect SQL Performance After Changes

 

SQL> begin
  2
  3  dbms_sqltune.execute_tuning_task (
  4                             execution_name => 'MY_REPLAY_EXECUTE_AFTER',
  5                             task_name => 'MY_REPLAY_TASK1');
  6  end;
  7  /

PL/SQL 过程已成功完成。

 

6. Comparing SQL Performance Before and After Change

 

SQL> begin
  2
  3  dbms_sqltune.execute_tuning_task (
  4                                      execution_name => 'MY_COMPARE_EXECUTION',
  5                                      task_name => 'MY_REPLAY_TASK1');
  6  end;
  7  /

PL/SQL 过程已成功完成。

7.Display the Results of a SQL Replay Task

 

set serveroutput on size 999999

set long 999999

select dbms_sqltune.report_tuning_task (‘MY_REPLAY_TASK1’) from dual;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值