转载-MySQL innodb binlog_cache_size
2016-09-26 16:28
288 查看
Mysql有很多系统变量可以设置,系统变量设置不同,会导致系统运行状态的不同。因此mysql提供两组命令,分别查看系统设置和运行状态。
1、系统设置:
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW VARIABLES shows the values of MySQL system variables.
2、运行状态:
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW STATUS provides server status information.
备注:SHOW XXX 可能会显示很多内容,类似Linux下内容太多了,往往需要grep来过滤,那么mysql也考虑到了这点,使用LIKE字句可以过滤。
以“二进制日志缓冲大小”系统参数:binlog_cache_size为例,说说如何综合使用上面两个命令。
我们知道InnoDB存储引擎是支持事务的,实现事务需要依赖于日志技术,为了性能,日志编码采用二进制格式。那么,我们如何记日志呢?有日志的时候,就直接写磁盘?可是磁盘的效率是很低的,如果你用过Nginx,一般Nginx输出access
log都是要缓冲输出的。因此,记录二进制日志的时候,我们是否也需要考虑Cache呢?答案是肯定的,但是Cache不是直接持久化,于是面临安全性的问题——因为系统宕机时,Cache中可能有残余的数据没来得及写入磁盘。因此,Cache要权衡,要恰到好处:既减少磁盘I/O,满足性能要求;又保证Cache无残留,及时持久化,满足安全要求。
参数:binlog_cache_size 就是满足以上两点的:一个事务,在没有提交(uncommitted)的时候,产生的日志,记录到Cache中;等到事务提交(committed)需要提交的时候,则把日志持久化到磁盘。
接着,binlog_cache_size设置多大呢?答案是:也需要权衡!
设置太大的话,会比较消耗内存资源(Cache本质就是内存),更加需要注意的是:binlog_cache是不是全局的,是按SESSION为单位独享分配的,也就是说当一个线程开始一个事务的时候,Mysql就会为这个SESSION分配一个binlog_cache (备注:我想之所以以SESSION为单位分配binlog_cache是有道理的,因为不同的mysql请求,产生的binlog数量不一样的,批量插入数据必然产生大量的binlog,而简单注册一个用户,产生的binlog有限,那么JDBC连接上能否设置binlog_cache_size呢?)。
设置太小的话,如果用户提交一个“长事务(long_transaction)”,比如:批量导入数据。那么该事务必然会产生很多binlog,这样cache可能不够用(默认binlog_cache_size是32K),不够用的时候mysql会把uncommitted的部分写入临时文件(临时文件cache的效率必然没有内存cache高),等到committed的时候才会写入正式的持久化日志文件。
怎么判断我们当前的binlog_cache_size设置的没问题呢?
查看生产服务器binlog_cache_size大小设置:64M,系统默认才32K
mysql> show session variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name |
Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
mysql> show global variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name |
Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
我们看看配置文件:
[@hostname ~]# grep 'binlog' /data/mydata/my3306/my3306.cnf
binlog_cache_size = 64M (管理员配置的的确是64M)
binlog_format = mixed
max_binlog_cache_size = 128M
max_binlog_size =
200M
sync_binlog = 0
[@hostname ~]#
我们看看配置64M是否够用?查看下运行情况:
mysql> show status like 'binlog_%';
+-----------------------+-----------+
| Variable_name |
Value |
+-----------------------+-----------+
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use |
120402264 |
+-----------------------+-----------+
2 rows in set (0.00 sec)
运行情况Binlog_cache_use 表示binlog_cache内存方式被用上了多少次,Binlog_cache_disk_use表示binlog_cache临时文件方式被用上了多少次。Binlog_cache_disk_use现在等于0,表示内存cache是够用的,从来不需要使用到临时文件。如果没有long_transaction的话,觉得64M是偏大的。
原地址:http://blog.sina.com.cn/s/blog_63426ff90101dwno.html
1、系统设置:
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW VARIABLES shows the values of MySQL system variables.
2、运行状态:
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW STATUS provides server status information.
备注:SHOW XXX 可能会显示很多内容,类似Linux下内容太多了,往往需要grep来过滤,那么mysql也考虑到了这点,使用LIKE字句可以过滤。
以“二进制日志缓冲大小”系统参数:binlog_cache_size为例,说说如何综合使用上面两个命令。
我们知道InnoDB存储引擎是支持事务的,实现事务需要依赖于日志技术,为了性能,日志编码采用二进制格式。那么,我们如何记日志呢?有日志的时候,就直接写磁盘?可是磁盘的效率是很低的,如果你用过Nginx,一般Nginx输出access
log都是要缓冲输出的。因此,记录二进制日志的时候,我们是否也需要考虑Cache呢?答案是肯定的,但是Cache不是直接持久化,于是面临安全性的问题——因为系统宕机时,Cache中可能有残余的数据没来得及写入磁盘。因此,Cache要权衡,要恰到好处:既减少磁盘I/O,满足性能要求;又保证Cache无残留,及时持久化,满足安全要求。
参数:binlog_cache_size 就是满足以上两点的:一个事务,在没有提交(uncommitted)的时候,产生的日志,记录到Cache中;等到事务提交(committed)需要提交的时候,则把日志持久化到磁盘。
接着,binlog_cache_size设置多大呢?答案是:也需要权衡!
设置太大的话,会比较消耗内存资源(Cache本质就是内存),更加需要注意的是:binlog_cache是不是全局的,是按SESSION为单位独享分配的,也就是说当一个线程开始一个事务的时候,Mysql就会为这个SESSION分配一个binlog_cache (备注:我想之所以以SESSION为单位分配binlog_cache是有道理的,因为不同的mysql请求,产生的binlog数量不一样的,批量插入数据必然产生大量的binlog,而简单注册一个用户,产生的binlog有限,那么JDBC连接上能否设置binlog_cache_size呢?)。
设置太小的话,如果用户提交一个“长事务(long_transaction)”,比如:批量导入数据。那么该事务必然会产生很多binlog,这样cache可能不够用(默认binlog_cache_size是32K),不够用的时候mysql会把uncommitted的部分写入临时文件(临时文件cache的效率必然没有内存cache高),等到committed的时候才会写入正式的持久化日志文件。
怎么判断我们当前的binlog_cache_size设置的没问题呢?
查看生产服务器binlog_cache_size大小设置:64M,系统默认才32K
mysql> show session variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name |
Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
mysql> show global variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name |
Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
我们看看配置文件:
[@hostname ~]# grep 'binlog' /data/mydata/my3306/my3306.cnf
binlog_cache_size = 64M (管理员配置的的确是64M)
binlog_format = mixed
max_binlog_cache_size = 128M
max_binlog_size =
200M
sync_binlog = 0
[@hostname ~]#
我们看看配置64M是否够用?查看下运行情况:
mysql> show status like 'binlog_%';
+-----------------------+-----------+
| Variable_name |
Value |
+-----------------------+-----------+
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use |
120402264 |
+-----------------------+-----------+
2 rows in set (0.00 sec)
运行情况Binlog_cache_use 表示binlog_cache内存方式被用上了多少次,Binlog_cache_disk_use表示binlog_cache临时文件方式被用上了多少次。Binlog_cache_disk_use现在等于0,表示内存cache是够用的,从来不需要使用到临时文件。如果没有long_transaction的话,觉得64M是偏大的。
原地址:http://blog.sina.com.cn/s/blog_63426ff90101dwno.html
相关文章推荐
- mysql-binlog_cache_size
- 一个参数引起的 MySQL 从库宕机血案(max_binlog_cache_size)
- Mysql 批量更新操作的时候出错 “Multi-statement transaction required more than 'max_binlog_cache_size' bytes of s
- MySQL 参数“max_binlog_cache_size”过小导致SQL失败
- mysql参数max_binlog_cache_size
- MySql [Err] 1197 - Multi-statement transaction required more than 'max_binlog_cache_size' bytes 解决方法
- mysql 大表迁移提示max_binlog_cache_size
- Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0
- mysql -参数thread_cache_size优化方法 小结
- MySQL优化经验 key_buffer_size, query_cache_size, table_cache
- 改变innodb_log_file_size后无法启动mysql---unknow table engine InnoDB
- mysql - 为magento性能测试修改innodb的innodb_buffer_pool_size而引发的问题
- MySQL优化经验 key_buffer_size,query_cache_size,ta
- MySQL优化经验 key_buffer_size,query_cache_size,table_cache
- mysql binlog binlog_cache_size
- 关于改变innodb_log_file_size后无法启动mysql的问题
- 转载:MySQL 5.5 — innodb_lock_wait
- mysql -参数thread_cache_size优化方法 小结
- MySQL优化经验 key_buffer_size,query_cache_size,table_cache
- Mysql启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 的问题