首页 > 其他分享 >相同更改数据量的前提下,单次COMMIT和多次COMMIT对日志空间浪费的影响对比

相同更改数据量的前提下,单次COMMIT和多次COMMIT对日志空间浪费的影响对比

时间:2023-06-19 14:03:18浏览次数:55  
标签:name redo 数据量 SQL ---------- COMMIT 日志 单次 select


LGWR进程按照顺序写在线日志,中间不会跳跃,而且LGWR进程不会在同一个日志快写2次,即使一次写入的日志快只占几个字节,下次不会再用了,这就造成日志空间的浪费。Oracle做一次Commit,就会触发LGWR进程进行日志缓冲到日志文件的写入操作,因此可以说更改相同数据量的前提下,如果提交过于频繁,产生的日志可能就会越多,即使第一次Commit占用的日志块仍可以存储下一次需要写入的日志缓冲,那么下一次Commit会再次占用一个新的日志块。


实验:

1、系统的日志块大小是512字节。

SQL> select max(lebsz) from sys.x$kccle;

MAX(LEBSZ)

----------

       512


2、创建两张相同数据量的表。

SQL> select count(*) from t1;

  COUNT(*)

----------

     11188


SQL> select count(*) from t2;

  COUNT(*)

----------

     11188



3、查看删除t1表前系统的浪费日志空间量。

SQL> select name, value from v$sysstat where name like '%wastage%';

NAME                                              VALUE

---------------------------------------------------------------- ----------

redo wastage                                        208060


4、逐条删除t1表的记录。

SQL> begin

  2  for i in 1 .. 11188 loop

  3  delete from t1 where rownum < 2;

  4  commit;

  5  end loop;

  6  end;

  7  /


5、再次查看日志空间浪费量。

SQL> select name, value from v$sysstat where name like '%wastage%';

NAME                                              VALUE

---------------------------------------------------------------- ----------

redo wastage                                       1118740

SQL> select 1118740-208060 from dual;

1118740-208060

--------------

     910680

浪费日志空间量是910680字节。


6、查看当前进程的SID。

SQL> select distinct sid from v$mystat;

       SID

----------

       215

进而查出当前进程消耗的redo量总大小。

SQL> select b.name, a.value from v$sesstat a, v$statname b

  2  where a.statistic#=b.statistic#

  3  and b.name like '%redo size%'

  4  and a.sid=215;

NAME                 VALUE

-------------------- ----------

redo size          9103304

可知日志空间浪费比率有10%

SQL> select 910680/9103304 from dual;

910680/9103304

--------------

    .100038404


7、接下来选择一次性删除t2表记录,之前记录下日志空间浪费大小。

SQL> select name, value from v$sysstat where name like '%wastage%';

NAME                 VALUE

-------------------- ----------

redo wastage          1130636


SQL> delete from t2;

11188 rows deleted.


SQL> commit;

Commit complete.


8、查看当前日志空间浪费。

SQL> select name, value from v$sysstat where name like '%wastage%';

NAME                 VALUE

-------------------- ----------

redo wastage          1132060


9、计算日志浪费空间比率。

SQL> select 1132060-1130636 from dual;

1132060-1130636

---------------

        1424


SQL> select b.name, a.value from v$sesstat a, v$statname b

  2  where a.statistic#=b.statistic#

  3  and b.name like '%redo size%'

  4  and a.sid=215;

NAME                 VALUE

-------------------- ----------

redo size            13154544


SQL> select 1424/13154544 from dual;

1424/13154544

-------------

   .000108252


从结果看,日志空间浪费比率仅为0.01%。


结论:

1、LGWR进程按照顺序将日志缓冲写入日志块,不会在同一个日志块中写入两次,就可能造成上一次写入的最后一个日志块会有空间的浪费,但下一次不能再使用,只能再次写入一个新的日志块。

2、相同更改数据量的前提下,多次提交Commit要比一次Commit浪费更多的日志块空间。

标签:name,redo,数据量,SQL,----------,COMMIT,日志,单次,select
From: https://blog.51cto.com/u_13950417/6512816

相关文章

  • git 修改、覆盖文件没有 add commit 放弃取消
    在git仓库中,修改了文件或 覆盖了文件,发现可能分支错了或其他原因,想撤销修改gitcheckout要撤销的文件当前仓库里文件: 创建一个和仓库相同文件名的文件 模拟一个相同文件名文件,覆盖仓库里的1.txt 文件被覆盖了: 内容也变了: 现在撤销覆盖,暂存区......
  • webstorm撤回git commit提交
       参考:https://blog.csdn.net/weixin_42504805/article/details/128483741......
  • Committer 迎新!这次是来自阿里云的同学
    截至今天,ApacheDolphinScheduler项目在GitHub上的Star数已突破10.6K,贡献者人数也突破了470人。社区的不断壮大,离不开每位Contributor的支持。最近,ApacheDolphinScheduler又迎来一位新Committer,他是来自阿里云的开发工程师,虽然参与ApacheDolphinScheduler社区贡......
  • git补充提交文件、注释 commit 后又push 到远程仓库(云端)
    注意:你查出来的远程分支名一般叫origin/XXX,命令里面的远程分支名不要带origin,千万要注意了。注意:你查出来的远程分支名一般叫origin/XXX,命令里面的远程分支名不要带origin,千万要注意了。注意:你查出来的远程分支名一般叫origin/XXX,命令里面的远程分支名不要带origin,千万要注意......
  • git commit撤销,还没有push
    还没有push时,撤销commit或add的文件 使用--soft参数,只撤销commit gitreset--softHEAD^使用 --hard 参数,连add也撤销了(修改的文件内容也被撤销了)gitreset--hardHEAD^ -参考:https://blog.csdn.net/w_p_wyd/article/details/12602......
  • Java中String类型能够存放多大的数据量?编译器只支持String只能存放65535个字符,运行时
    Java中String类型能够存放多大的数据量?https://blog.csdn.net/weixin_52707625/article/details/125583678最近在编写博客系统时,在文章上传遇到了个问题:到底使用什么来接收文章呢?String类型能接收多大的数据量?随后,我去网上找了一下,发现都是说String只能存放65535个字符啊......
  • git命令修改已经commit的内容
    参考:https://www.jianshu.com/p/0f1fbd50b4be  总结如下: 1.  gitrebase-iHEAD~3  命令3表示你最近提交的一次提交数 2.输入i进入编辑页面.讲pick修改为edit 3.输入gitcommit--amend 4.gitrebase--continue   这里面我有问题,就是既然能进......
  • Git Commit 规范
    GitCommit规范Git是目前最常用的版本控制系统之一,而良好的GitCommit规范能够提高代码库的可读性、可维护性和合作效率。本文将介绍一些常见的GitCommit规范,帮助开发团队更好地管理和理解代码库的变更历史。为什么需要GitCommit规范?清晰、一致的GitCommit信息对......
  • 首次启动Kafka报Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memor
    首次启动Kafka报错如下:原因:内存不足,查看启动配置调小一些:......
  • Git commit –amend 修改上一次 commit message
    Gitcommit–amend修改上一次commitmessage#gitcommit-amend-m"newmessage"但是不能是已经push的提交参考资料1、git修改已提交的内容2、git之修改上次提交备注......