mysql 设置默认值_MySQL 之 InnoDB引擎 Log Buffer

Log Buffer(日志缓冲区)是一块内存区域用来保存要写入磁盘上的日子文件的数据。 Log Buffer的大小由innodb_log_buffer_size变量定义。默认大小为16MB。Log Buffer的内容会定期刷到磁盘上。大的Log Buffer让较大事务能够运行,而无需在事务提交之前将redo log中的数据写入磁盘。

因此,如果有DML操作并且会影响很多行这样是事务,增加日志缓冲区的大小可以节省磁盘IO

它会存储InnoDB存储引擎层日志:redo日志和undo日志

它位于InnoDB引擎架构的内存中的结构:

2fd19e4dd34aaa55e7bf04cc648c6deb.png

系统变量

innodb_flush_log_at_trx_commit

控制如何写入日志缓冲区的内容并刷入磁盘

完全符合ACID要求默认设置为1。在每次事务提交时写入日志并刷新到磁盘。可以通过更改默认值来获得更好的性能,但随后可能会在崩溃中丢失事务。

该变量有三种值,0,1,2

其中1是默认值,也是最严格的,最安全的,在每次事务提交时写入日志并刷新到磁盘,确保数据不会丢失,但是性能上是最低的,一般来说大家都不选择这个默认值,因为刷到磁盘是一次比较昂贵的操作,有一定的物理写入如果可能的话不建议使用默认值。但是从安全角度考虑的话是最好的,mysqld进程和操作系统崩溃都不会丢失事务。(最安全,最慢)

如果设置为0,则每秒写入日志并将其刷新到磁盘一次。未刷新日志的事务可能会在崩溃中丢失。(log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。)也就是这一秒的数据没有写入log file内,只要mysqld的进程崩溃就会导致上一秒的事务丢失。(最不安全,最快)

设置为2时,在每次事务提交后写入日志,并每秒刷新一次磁盘。未刷新日志的事务可能会在崩溃中丢失。(每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。)也就是每次事务提交,该事务都会在log file里面,但刷入磁盘的操作是每秒一次的,不是写入log file时一起(同步)的,所以只有操作系统崩溃或断电的情况下才会丢失上一秒的事务。(较快,比设置为0安全)

根据实际的业务场景,权衡安全和性能进行选择,0和2之间的性能差异基本可以忽略,一般来说会比较偏向设置为2

以上是对InnoDB引擎Log Buffer的一些粗浅认识

本狗头博客:https://blog.csdn.net/qq_36652619/article/details/89715191

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值