一 简介:来聊聊binlog cache
二 定义
为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存。
三 参数
1 binlog_cache_size 默认 32K 用于指定存储整个事物生成的binlog event的内存大小,对于大事物来讲很可能超过这个参数的设置,则需要开启binlog 临时文件用于存储。
2 max_binlog_cache_size 用于指定当某个事物的binlog event超过了binlog_cache_size大小的设置开启binlog 临时文件的可用大小,如果事物的binlog event生成量超过了max_binlog_cache_size+binlog_cache_size设置的大小则会抛错:
四 临时文件
1 临时文件存放在tmpdir的定义的目录下,文件名为”ML”开头。但是这个文件不能用ls看到,需要lsof命令
2 当我们执行多语句事务的时候 所有session的使用的内存超过max_binlog_cache_size的值时
就会报错:“Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage
五 状态
查看 binlog_cache的使用情况 单位是次
Binlog_cache_disk_use 缓存
Binlog_cache_use 临时文件
1 当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值,减少IO层的操作交互
六 整体流程
1 事务开启
2 事务执行DML语句 分配独立binlog_cache,并且写入
3 如果binlog cache的空间已经满了,则将binlog cache的数据写入到binlog临时文件,同时清空binlog cache。如果binlog临时文件的大小大于了max_binlog_cache_size的设置则抛错ERROR 1197 (HY000)。
4 事物提交,整个binlog cache和binlog临时文件数据全部写入到binlog file中进行固化,释放binlog cache和binlog临时文件
5 断开连接 释放回收
参考原文链接 :
https://www.jianshu.com/p/fb4ffe7fd7d2 八怪大神