问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何计算某个sql语句所产生的redo和undo大小

发布网友 发布时间:2022-04-20 05:08

我来回答

1个回答

热心网友 时间:2022-04-10 15:54

回答该问题其实非常的简单,花了20分钟做了如下简单的测试,供大家参考。
SQL> CREATE TABLE killdb AS SELECT * FROM dba_objects;
TABLE created.
SQL> SELECT COUNT(*) FROM killdb;
COUNT(*)
----------
50100
SQL> SET autotrace traceonly statistics
SQL> SET LINES 150
SQL> UPDATE killdb
2 SET wner='www.killdb.com'
3 WHERE object_id >1000 AND object_id <1200;
199 ROWS updated.
Statistics
----------------------------------------------------------
51 recursive calls
208 db block gets
798 consistent gets
0 physical reads
53908 redo SIZE
668 bytes sent via SQL*Net TO client
619 bytes received via SQL*Net FROM client
3 SQL*Net roundtrips TO/FROM client
1 sorts (memory)
0 sorts (disk)
199 ROWS processed
此时我们知道这个update语句会产生53908 byte的redo 日志。当然这个是sql未执行前就进行的计算,
如果要计算某个sql执行完毕以后所产生的redo size,我们还可以通过查询v$mystat试图获得结果,如下:
SQL> SET autot off
SQL> SELECT a.name, b.VALUE
2 FROM v$statname a, v$mystat b
3 WHERE a.statistic# = b.statistic#
4 AND a.name = 'redo size';
NAME VALUE
--------------------- ----------
redo SIZE 5807132
SQL> UPDATE killdb
2 SET wner='www.killdb.com'
3 WHERE object_id >1000 AND object_id <1200;
199 ROWS updated.
SQL> commit;
Commit complete.
SQL> SELECT a.name, b.VALUE
2 FROM v$statname a, v$mystat b
3 WHERE a.statistic# = b.statistic#
4 AND a.name = 'redo size';
NAME VALUE
--------------------- ----------
redo SIZE 5829644
SQL> SELECT 5829644 - 5807132 FROM al;
5829644-5807132
---------------
22512
我们可以明显的看到,通过查询v$mystat 得出的结果跟前面通过看sql执行计划统计信息
结果有较大的差别,区别在哪儿呢?
这是session级别的,因为还涉及到一些递归的操作,也会产生redo,所以上面单纯的查询
session的redo产生大小,并不准确,我们应该查询整个db instacne的,如下:
SQL> CREATE TABLE killdb2 AS SELECT * FROM dba_objects;
TABLE created.
SQL> ALTER system checkpoint;
System altered.
SQL> ALTER system switch logfile;
System altered.
SQL> SELECT name,VALUE FROM v$sysstat WHERE name = 'redo size';
NAME VALUE
--------------------- ----------
redo SIZE 27301552
SQL> UPDATE killdb2
2 SET wner='www.killdb.com'
3 WHERE object_id >1000 AND object_id <1200;
199 ROWS updated.
SQL> commit;
Commit complete.
SQL> SELECT name,VALUE FROM v$sysstat WHERE name = 'redo size';
NAME VALUE
--------------------- ----------
redo SIZE 27355556
SQL> SELECT 27355556 - 27301552 FROM al;
27355556-27301552
-----------------
54004
我们可以看到,此时的54004 跟最开始的50100算是比较接近了。
SQL> SELECT xisn,xidslot,xidsqn,ubablk,ubafil,ubarec FROM v$transaction;
no ROWS selected
SQL> SELECT ubafil,ubablk,start_ubablk,used_ublk FROM v$transaction;
no ROWS selected
SQL> DELETE FROM killdb WHERE rownum < 1000;
999 ROWS deleted.
SQL> SELECT xisn,xidslot,xidsqn,ubablk,ubafil,ubarec FROM v$transaction;
XIDUSN XIDSLOT XIDSQN UBABLK UBAFIL UBAREC
---------- ---------- ---------- ---------- ---------- ----------
10 39 354 1256 2 26
SQL> SELECT ubafil,ubablk,start_ubablk,used_ublk FROM v$transaction;
UBAFIL UBABLK START_UBABLK USED_UBLK
---------- ---------- ------------ ----------
2 1256 1229 28
SQL> conn /AS sysdba
Connected.
SQL> SELECT SUM(KTUXESIZ)
2 FROM x$ktuxe
3 WHERE KTUXEUSN=10 AND KTUXESLT=39 AND KTUXESQN=354;
SUM(KTUXESIZ)
-------------
28
SQL> SELECT 28*8192 FROM al;
28*8192
----------
229376
从上我们可以看到该delete语句所产生的undo 大小是229376 BYTE。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? delphi7 求自动关机源码 如何高效 online 创建大表的索引 oracle 什么时候使用索引 sql profile和SPM baseline谁的优先级高 Oracle中表建立联合索引后,其中的一个字段是否可... 如何从硬盘直接进入DOS,再使用GHOST。. set autotrace on时候为什么会报Cannot SET AUTOTRACE 我的系统是vista,开机的时候有两个启动项是我不想... 如何获取执行计划 如何启用sqlplus的AutoTrace功能 如何做trace 每一步 每一行 哪里有Autot cad2007教学视频下载 提示 autoit v3:autot3.exe-损坏文件 怎么修复?请... AutotCAD中怎么删除已定义的块??? 为什么很多人宁愿买小米8SE也不买小米8? 安利这个牌子是哪个国家的呢? 安利为什么消失了 郑州出租车网官网怎么不能预约? 我想在郑州考取出租车资格证,请问在哪儿报名?多... 郑州出租车网怎么打不开 Oracle 如何控制查询不区分大小写? oralce 计算当前记录排在总记录数的百分之多少 oracle的recursive calls为什么这么高 oracle hint cardinality 提示什么意思 请教高手:oracle临时表创建优化 常用理发工具有哪些?都有什么用途? 你好请问欧派电热水器显示E1故障? 剪头发需要哪些工具? 理发店像狼牙棒的工具叫什么,可蓬松头发的那种 削薄头发使用的剪子叫什么 自己理发需要买什么工具? 理发店用品名称都有哪些 理发工具有哪些 理发店常用工具有哪些? 理发店用的那个把头发拉直的夹子叫什么? 剃头的头子是什么东西 (理发)什么是卡尺,剃完啥样? 理发拉线工具叫什么? 过去理发喊人工具叫什么 为什么我的word文档不能给图片加边框?