大事务回滚估算

在系统上线、日常运维时,难免会出现由于SQL效率不佳,或者写错,导致出现回滚的现象;在大事务时,回滚常常耗时很久,如何较为准确得估算回滚的时间,可以帮助我们制定相应的计划:

–准备数据

SQL>  create table testpp as select pk_person from person where rownum<1000000;

Table created. 

SQL> create index i_pp on  testpp (pk_person); 

Index created. 

进行删除操作

SQL>  delete from TESTPP where rownum<950000; 

949999 rows deleted. 

SQL> rollback; 



查询当前事务的回滚数据量 

16:40:50 SQL> select t.ses_addr,t.used_urec from v$transaction t; 

SES_ADDR          USED_UREC
 ----------------------------     ----------
 0700010130EBD998    1899998 


`
其中SES_ADDR:User session object address 

USED_UREC:Number of undo records used 



由于测试表创建了索引,因此回滚的数据量除了表数据外,还包含了索引数据,所以总的数据量为1899998 



16:42:09 SQL> / 

SES_ADDR          USED_UREC
 ---------------- ----------
 070001012D1070C0          3
 0700010130EBD998    1501572 



再进行查询,从两个时间间隔中就可以估算每分钟回滚的数据量了。 



为了确认该回滚就是对应的之前的sql,可通过如下方法: 
select s.osuser,s.program,s.sql_hash_value,s.sql_id,s.prev_sql_id
 from v$transaction t,v$session s
 where t.ses_addr = s.saddr; 

OSUSER     PROGRAM                                  SQL_HASH_VALUE SQL_ID        PREV_SQL_ID
 ---------- ---------------------------------------- -------------- ------------- -------------
 logcx      sqlplus@T187PC16VM14 (TNS V1-V3)                      0               9085cz60z4pg3



 SQL>  select sql_text from v$sql where sql_id='9085cz60z4pg3'; 

SQL_TEXT
 ------------------------------------------
  delete from TESTPP where rownum<950000 


符合我们的预期!
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值