欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

binlog cache size binlog_cache_size 设置是否合理判断 有大用

二进制日志是写操作是,首先写入二进制日志缓冲(binlog_cache)然后commit,再从binlog_cache写入到binlog文件,默认大小为32K,而binlog_cache是session级别的,也就是说实际binlog cache占用内存数= connections * binlog_cache,可见如果connection过高,binlog_cache不宜设置的过大,如果binlog_cache设置的过小,不足以满足commit前transaction产生的binlog时,会引发mysql使用临时文件来写binlog_cache。那么如何判断当前session的binlog_cache设置的是否合理呢。可以通过下面的命令查看。

show variables like '%binlog_cache_szie%';(32K)

 

show global status like '%binlog_cache%';

binlog_cache_use:内存中使用binlog_cache次数

binlog_cache_disk_use:使用临时文件(即磁盘)写二进制日志次数。

从上面的截图可以看出,mysql使用了5次临时文件来写入binlog_cache,说明32K的binlog_cache_size对当前mysql来说并不够用。可根据系统实际的内存压力来调整binlog_cache_size参数。



浅析mysql内存参数之-- binlog_cache_size

binlog_cache_size

0.前提:

服务器配置了 log-bin

1.含义:

 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存。

2.作用:

提高记录bin-log的效率

3.属性:

参数:global

默认值:32768   -- 即 32K

范围:4096 .. 4294967295

4.大小选择:

a.根据业务:

没有什么大事务,dml也不是很频繁的情况下可以设置小一点,如果事务大而且多,dml操作也频繁,则可以适当的调大一点。

前者建议是1048576  --1M

后者建议是: 2097152 -- 4194304  即 2--4M

b.根据参数:

show global status like 'bin%';

上述语句我们可以得到当前 数据库binlog_cache_size的使用情况

+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Binlog_cache_disk_use | ???
| Binlog_cache_use      | ?????

Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数

Binlog_cache_use  表示 用binlog_cache_size缓存的次数

当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值

 

4.注意点:

a.max_binlog_cache_size 表示的是binlog 能够使用的最大cache 内存大小

当我们执行多语句事务的时候 所有session的使用的内存超过max_binlog_cache_size的值时

就会报错:“Multi-statement transaction required more than 'max_binlog_cache_size' bytes ofstorage”

b.设置太大的话,会比较消耗内存资源;设置太小又会使用到临时文件即disk

 

5.配置

a.配置文件设置my.cnf

binlog_cache_size = 1M

b. set global binlog_cache_size = 1048576;

 

 


来自  https://blog.csdn.net/lxpbs8851/article/details/38455223



普通分类: