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

简介: LGWR进程按照顺序写在线日志,中间不会跳跃,而且LGWR进程不会在同一个日志快写2次,即使一次写入的日志快只占几个字节,下次不会再用了,这就造成日志空间的浪费。

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浪费更多的日志块空间

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
Linux
百度搜索:蓝易云【centos系统应用日志文件被删,空间无法释放怎么办】
通过以上方法,你应该能够解决应用日志文件被删除但空间无法释放的问题,并恢复磁盘空间。
31 1
|
7月前
|
存储 监控
日志服务SLS全新发布按写入数据量计费模式节省计划
按写入数据量计费模式节省计划是一种“比按量计费更划算,比包年包月更灵活”的全新计费模式。支持0预付、全预付,您可以通过承诺在一定期限内消费一定的金额,获取比按量计费低至 50% 的价格。
202 0
|
9月前
|
测试技术 开发工具 git
git commit message——git提交日志规范备忘
使用git提交时,最好能注意保持规范,可能某些公司对这方面没有要求,但是提交日志不规范的话,不方便查阅和管理。 在此记录下commit的类别,备忘,更详细的介绍,可以查看文末链接。
111 0
|
9月前
|
算法 安全 Java
JVM学习日志(十一) 对象进入老年代的情况 及 空间担保机制
对象进入老年代的情况 及 空间担保机制 简述
348 0
JVM学习日志(十一) 对象进入老年代的情况 及 空间担保机制
|
9月前
|
存储 监控 数据可视化
日志服务 SLS 全新发布按写入数据量计费模式
日志服务 SLS 全新推出的按写入数据量计费模式让 SLS 更普惠、更易用!仅收取原始数据(非压缩)写入费用、存储费用以及外网数据流量费用,帮助用户购买更简单、费用可预期、轻松拓展更丰富场景。
1846 0
|
消息中间件 存储 编解码
重新理解RocketMQ Commit Log存储协议
Consumer Queue Offset是连续的吗, Commit Log Offset是连续的吗?今天我们一起重新理解RocketMQ Commit Log存储协议。
334 0
重新理解RocketMQ Commit Log存储协议
|
存储 SQL 关系型数据库
【redo log、bin log、undolog、purge操作、group commit】
【redo log、bin log、undolog、purge操作、group commit】
155 0
|
SQL 数据库
FAQ系列 | slow log中出现commit、binlog dump等奇怪的记录
FAQ系列 | slow log中出现commit、binlog dump等奇怪的记录
|
算法 数据库 索引
慢查询日志中出现commit
在慢查询日志中出现commit,就是因为事务提交(commit)的时间过长。
229 0
慢查询日志中出现commit
|
SQL 关系型数据库 数据库
解决 RDS SQL Server 日志空间增长问题
解决 RDS SQL Server 日志空间增长问题