设为首页 收藏本站
查看: 1012|回复: 0

[经验分享] Oracle DML产生 REDO SIZE测试

[复制链接]

尚未签到

发表于 2016-8-12 06:22:00 | 显示全部楼层 |阅读模式
--DML redo测试
/*
*普通表的redo size 为insert 5M,delete 18m, update 24M
*临时表redo size 为insert 276096字节, Delete 为15M ,update 为 8M,
*全局临时表与基于事务的临时表 产生的redo size差不多。
*
*/
/*
*另外的备注,若普通表DML每一步,不commit。测试的结果为 insert 5M, update 12M, delete 15M
*/
--需要sysdba权限
SQL> grant all on v_$mystat to admin;
授权成功。
SQL> grant all on v_$statname to admin;
授权成功。
--创建视图,访问当前session 的redo size
admin@ORCL> CREATE VIEW V_USER_REDO
2 AS
3 SELECT NAME,VALUE FROM V$MYSTAT CUR_STAT INNER JOIN V$STATNAME STATE_NAME ON
4 CUR_STAT.STATISTIC# = STATE_NAME.STATISTIC#
5 WHERE STATE_NAME.NAME = 'redo size';
视图已创建。
--创建表结构,不生成数据
admin@ORCL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS WHERE 1=0;
表已创建。
--创建临时表,用于insert 的数据
admin@ORCL> CREATE TABLE TMP_INSERT AS SELECT * FROM DBA_OBJECTS;
表已创建。
--查看当前redo
admin@ORCL> column name for a20
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;
NAME VALUE
-------------------- ----------
redo size 147500
--执行INSERT,查看产生的redo日志大小
admin@ORCL> INSERT INTO T SELECT * FROM TMP_INSERT;
已创建52373行。
admin@ORCL> COMMIT;
提交完成。
--查看redo,产生了5924328 字节日志,大约5M多大小
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;
NAME VALUE
-------------------- ----------
redo size 6071828

--查看DELETE产生的日志大小,为18936864字节的redo日志,大小约为18M大小
admin@ORCL> DELETE FROM T;
已删除52373行。
admin@ORCL> COMMIT;
提交完成。
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;
NAME VALUE
-------------------- ----------
redo size 25008692

--查看UPDATE产生的日志,重新插入数据.
--产生了24160520字节的日志,大约24M
admin@ORCL> DROP TABLE T PURGE;
表已删除。
admin@ORCL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;
表已创建。
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;
NAME VALUE
-------------------- ----------
redo size 53034948
admin@ORCL> UPDATE T SET OBJECT_ID = 12;
已更新52373行。
admin@ORCL> COMMIT;
提交完成。
admin@ORCL> SELECT NAME,VALUE FROM V_USER_REDO;
NAME VALUE
-------------------- ----------
redo size 77195468
--测试临时表DML产生的redo size
--总体来看临时的redo 为 insert 276096字节,update 为 8M, Delete 为15M
--创建基于session的全局临时表
admin@ORCL> CREATE GLOBAL TEMPORARY TABLE T_TMP_SESSION ON COMMIT PRESERVE ROWS
2  AS
3  SELECT * FROM DBA_OBJECTS;
表已创建。
--基于事务的全局临时表
admin@ORCL> CREATE GLOBAL TEMPORARY TABLE T_TMP_TRANSACTION ON COMMIT DELETE ROWS
2  AS
3  SELECT * FROM DBA_OBJECTS;
表已创建。
--当前的redo size,分析全局临时表插入产生的redo size
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                             15268
admin@ORCL> insert into T_TMP_SESSION select * from dba_objects;
已创建50779行。
admin@ORCL> COMMIT;
提交完成。
--查看insert后的,全局redo大小为291468-15268 = 276200
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            291468
--分析基于transaction insert产生的redo size,为276096-0 = 276096
--打开另一个session
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                                 0

admin@ORCL>  insert into T_TMP_TRANSACTION select * from dba_objects;
已创建50779行。
admin@ORCL> commit;
提交完成。
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276096
--分析update,全局临时表的redo size 为 8122436,而基于事务的临时表为 8122316
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276060
admin@ORCL> update t_tmp_session set object_id = rownum;
已更新50779行。
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398496

admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                            276100
admin@ORCL> update t_tmp_transaction set object_id = rownum;
已更新50779行。
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398416
--delete产生的redo size 全局临时表的redo size 为 15056824 ,而基于事务的临时表为 15061984
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398644
admin@ORCL> select count(*) from t_tmp_session;
COUNT(*)
----------
50779
admin@ORCL> delete t_tmp_session;
已删除50779行。
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          23455468

admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                           8398416
admin@ORCL> delete T_tmp_transaction;
已删除50779行。
admin@ORCL> select * from v_user_redo;
NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                          23460400

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256411-1-1.html 上篇帖子: oracle WM_CONCAT行转列 下篇帖子: 去掉oracle字段的默认值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表