龙空技术网

Oracle监控进度--delete大量数据时如何监控delele进度?

波波说运维 1294

前言:

此时朋友们对“oracle删除部分数据语句”大体比较注重,各位老铁们都需要学习一些“oracle删除部分数据语句”的相关文章。那么小编也在网摘上搜集了一些有关“oracle删除部分数据语句””的相关文章,希望兄弟们能喜欢,小伙伴们快快来了解一下吧!

概述

很多时候我们在对数据库做delete操作时,如何想知道目前delete的大概进度可以怎么知道呢?毕竟delete过程中没有提交不能简单的通过表数量来做判断。

1、删除一个大表

测试环境模拟删除一张1亿数据表中7000万条记录,命令如下:

alter table xx nologging;delete /*+parallel(t 8)*/ xxxT t where insert_time<=to_date('20180630 00:00:00','yyyymmdd hh24:mi:ss');commit;alter table xxx logging;

这里一定要注意观察UNDO表空间使用率(观察连接的是哪个实例,然后看对应的UNDO空间,假设UDNOTBS1使用了比较多空间,就需要连接到RFDB2实例,充分利用UNDO空间),归档空间情况(虽然已经nologging,但归档日志还是有发生切换,需要注意)及数据库服务器负载和告警日志。

2、查看UNDO使用情况

删除过程中观察UNDO使用了72%

3、查看删除进度

我们可以通过观察v$transaction来获得delete过程的情况。

select start_time,start_scnb,used_ublk,used_urec,log_io,phy_io from v$transaction;

说明:

start_time --> start_time start_scnb --> 开始的scnused_ublk --> 占用的undo blockused_urec --> undo 记录的行数log_io --> 逻辑io 注意并非Consistent gets,有专门一列:CR_GETphy_io --> 物理io4、查询正运行事务

用如下SQL查询到正在运行的事务,如其used_urec字段不断增加,说明该事务正在继续,如果该字段不断下降,说明该事物正在回滚。

SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk from v$session a, v$transaction b WHERE a.saddr = b.ses_addr;
5、补充说明

v$transaction字段说明:

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下!

标签: #oracle删除部分数据语句 #oracle清空一列 #oracle执行多条insert语句 #oracle删除多条数据 #oracle删除一条数据