`
eyesmore
  • 浏览: 363463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql innodb binlog_cache_size 设置

阅读更多
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是偏大的。
分享到:
评论

相关推荐

    MySQL thread_cache和table_cache详解

    THREAD_CACHE MySQL里面为了提高客户端请求创建连接过程的性能,提供了一个连接池也就是 Thread_Cache池,将空闲的连接线程放在连接池中,而不是立即销毁.这样的好处就是,当又有一个新的请求的时候,mysql不会立即去创建...

    浅析MySQL内存的使用说明(全局缓存+线程缓存)

    首先我们来看一个公式,MySQL中内存分为全局内存和线程...buffer_size+binlog_cache_size+tmp_table_size)*max_connectionsglobal_buffers=innodb_buffer_pool_size+innodb_additional_mem_pool_size+innodb_log_buf

    MySQL的Innodb引擎配置说明.txt

    内容包括: 1.MySQL的Innodb引擎配置 1.如何配置MySQL服务器的最大连接数量 2.如何配置innodb_open_files,table_open_cache,innodb_file_io_threads和innodb_buffer_pool_size,innodb_log_file_size

    浅析在线调整 innodb_buffer_pool_size

    浅析在线调整 innodb_buffer_pool_size 作者:zhou mysql版本:5.7 先介绍一下 buffer pool: 在innodb存储引擎中数据访问以page为单位,page也是innodb管理数据库的最小磁盘单位,每个page的默认大小为16KB(可以通过...

    MySQL修改innodb_data_file_path参数的一些注意事项

    在测试环境下没有设置过多的详细参数就初始化并启动了服务,后期优化的过程中发现innodb_data_file_path设置过小: root@node1 14:59: [(none)]> show variables like '%innodb_data_file_path%'; +

    MySQL8.0内存相关参数总结

    也就是:innodb_buffer_pool_size + innodb_log_buffer_size + thread_cache_size +table_open_cache + table_definition_cache +key_buffer_size + max_connections *( thread_stack+ sort_buffer_size+join_...

    mysql 5.6 新特性-innodb

    mysql 5.6 新特性 innodb

    MySQL Innodb 参数详解与优化实践

    MySQL Innodb 参数详解与优化实践

    Max-Liuhu#keeplearning#mysql配置文件之线程并发优化innodb_buffer_pool_size1

    MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟

    py_innodb_page_info工具类 包含python2,python3两个版本

    py_innodb_page_info工具为《INNODB存储引擎》作者姜承尧写的。 该工具用来分析表空间中的各页得类型和信息,用python编写。 网上多是python2版本的,这里给出python3版本的。

    mysql主从复制

    [root@localhost ~]# vim /etc/my.cnf 1>#skip-networking这个参数作用是是否允许远程访问,如果将#号去掉,将不能访问...7> innodb_buffer_pool_size = 128M共享表空间,表数据,索引存放之地,可以分配内存的50%~80%

    InnoDB存储引擎中有页(Page)的概念

    InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小: mysql> show variables like 'innodb_page_size'; 而系统一个磁盘块的...

    py_innodb_page_info工具

    使用py_innodb_page_info 查看分析各种log以及data file,深入研究mysql的存储引擎底层原理与实现。 mysql innodb undo redo

    mysql innodb_thread_concurrency.zip

    如果你的服务器的CPU或者IO使用接受饱和,特别是偶尔出现峰值,这时候系统想在超载时能正常处理查询,那么强烈建议关注innodb_thread_concurrency

    mysql tmp_table_size优化之设置多大合适

    主要介绍了mysql tmp_table_size优化问题,很多朋友都会问tmp_table_size设置多大合适,其实既然你都搜索到这篇文章了,一般大于64M比较好,当然你也可以可以根据自己的机器内容配置增加,一般64位的系统能充分利用...

    修改Innodb的数据页大小以优化MySQL的方法

    主要介绍了修改Innodb的数据页大小以优化MySQL的方法,Innodb是MySQL下一个颇具人气的数据引擎,需要的朋友可以参考下

    mysql参数及其优化

    query_cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_...

    MySQL InnoDB row_id边界溢出验证的方法步骤

    主要给大家介绍了关于MySQL InnoDB row_id边界溢出验证的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用MySQL InnoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    MySQL InnoDB 源码实现分析

    MySQL InnoDB 源码实现分析

Global site tag (gtag.js) - Google Analytics