在数据库安装完毕,对于binlog日志参数设置,有一些参数的调整,来满足业务需求或使性能最大化。Mysql日志主要对io性能产生影响,本次主要关注binlog 日志。

查一下二进制日志相关的参数

mysql> show variables like '%binlog%';

+-----------------------------------------+----------------------+

| Variable_name                           | Value                |

+-----------------------------------------+----------------------+

| binlog_cache_size                       | 32768                |

| binlog_checksum                         | CRC32                |

| binlog_direct_non_transactional_updates | OFF                  |

| binlog_format                           | STATEMENT            |

| binlog_max_flush_queue_time             | 0                    |

| binlog_order_commits                    | ON                   |

| binlog_row_image                        | FULL                 |

| binlog_rows_query_log_events            | OFF                  |

| binlog_stmt_cache_size                  | 32768                |

| innodb_api_enable_binlog                | OFF                  |

| innodb_locks_unsafe_for_binlog          | OFF                  |

| max_binlog_cache_size                   | 18446744073709547520 |

| max_binlog_size                         | 1073741824           |

| max_binlog_stmt_cache_size              | 18446744073709547520 |

| sync_binlog                             | 0                    |

+-----------------------------------------+----------------------+

其中innodb_locks_unsafe_for_binlog 参数是innodb存储引擎特有的与binlog相关的参数,默认是关闭的

binlog_cache_size:默认大小是37268即32K.在事务过程中容纳二进制日志SQL语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(―log-bin选项)的前提下为每个客户端分配的内存,

注意,是每个Client都可以分配设置大小的binlogcache空间。如果读者朋友的系统中经常会出现多语句事务的华,可以尝试增加该值的大小,以获得更有的性能;

我们可以通过以下两个状态变量判断binlog_cache_size的使用情况:

1)binlog_cache_use: The number of transactions that used the temporary binary log cache.

----使用二进制日志缓存的事务的数量

2)binlog_cache_disk_use: The number of transactions that used the binary log cache but that exceeded the value of binlog_cache_size and used a temporary file to store changes from the transaction.

----使用二进制日志缓存并且值达到了binlog_cache_size设置的值,用临时文件存储来自事务的变化这样的事务数量

==

我们看看配置文件:

[@hostname ~]# grep 'binlog' /data/mydata/my3306/my3306.cnf

binlog_cache_size = 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是偏大的。

---

Max_binlog_cache_size: 默认值是18446744073709547520,这个值很大,够我们使用的了。此参数和binlog_cache_size相对应,是所代表的是binlog能够使用的最大cache内存大小。

当我们执行多语句事务的时候,max_binlog_cache_size如果不够大的话,系统可能会报出“Multi-statementtransactionrequiredmorethan'max_binlog_cache_size'bytesofstorage”的错误。

Max_binlog_size: 1073741824=1G  binlog的最大值,一般设置为512M或1G,一般不能超过1G;

该大小并不能非常严格控制Binlog大小,尤其是当到达Binlog比较靠近尾部而又遇到一个较大事务的时候,系统为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进入当前日志,直到该事务结束。

这一点和Oracle的Redo日志有点不一样,因为Oracle的Redo日志所记录的是数据文件的物理位置的变化,而且里面同时记录了Redo和Undo相关的信息,所以同一个事务是否在一个日志中对Oracle来说并不关键。

而MySQL在Binlog中所记录的是数据库逻辑变化信息,MySQL称之为Event,实际上就是带来数据库变化的DML之类的Query语句。

sync_binlog:这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。

而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。从以往经验和相关测试来看,

对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。

==========

Slow Query Log 相关参数及使用建议

--

mysql> show variables like 'log_slow%';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| log_slow_queries | ON |

+------------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'long_query%';

+-----------------+-------+

| Variable_name | Value |

+-----------------+-------+

| long_query_time | 1 |

+-----------------+-------+

1 row in set (0.01 sec)

log_slow_queries---参数显示了系统是否已经打开SlowQueryLog功能,而long_query_time参数则告诉我们当前系统设置的SlowQuery记录执行时间超过多长的Query。

在MySQLAB发行的MySQL版本中SlowQueryLog可以设置的最短慢查询时间为1秒,这在有些时候可能没办法完全满足我们的要求,如果希望能够进一步缩短慢查询的时间限制,可以使用Percona提供的microslow-patch(件成为mslPatch)来突破该限制。

mslpatch不仅仅能将慢查询时间减小到毫秒级别,同时还能通过一些特定的规则来过滤记录的SQL,如仅记录涉及到某个表的SlowQuery等等附加功能。

打开SlowQueryLog功能对系统性能的整体影响没有Binlog那么大,毕竟SlowQueryLog的数据量比较小,带来的IO损耗也就较小,但是,系统需要计算每一条Query的执行时间,所以消耗总是会有一些的,主要是CPU方面的消耗。

如果大家的系统在CPU资源足够丰富的时候,可以不必在乎这一点点损耗,毕竟他可能会给我们带来更大性能优化的收获。但如果我们的CPU资源也比较紧张的时候,也完全可以在大部分时候关闭该功能,而只需要间断性的打开SlowQueryLog功能来定位可能存在的慢查询。

MySQL的其他日志由于使用很少(QueryLog)或者性能影响很少,我们就不在此过多分析了,至于各个存储引擎相关的日志,我们留在后面“常用存储引擎优化”部分再做相应的分析。

转自《mysql性能调优与架构设计》

mysql开启binlog日志影响性能吗_mysql binlog日志优化及思路相关推荐

  1. 不属于mysql二进制日志相关的参数_MySQL二进制日志相关问题详解

    本文出处: (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 今天无意中发现了一个云栖社区举行的MySQL"第一 ...

  2. mysql binlog定点恢复锁表_MySQL -- binlog 操作与恢复

    binlog 开启.查看: > show variables like 'log_bin';  #查看是否开启 > set sql_log_bin=1 || set sql_log_bin ...

  3. mysql函数 优化_Mysql函数求优化解决思路

    mysql函数求优化 小弟刚开始接触Mysql数据库,需要基于Mysql数据库做报表开发,写的一个函数查询时候效率特别低下. 备注:传进来比较的参数数据量 5W条左右.请高手指教优化方法. 另外,一般 ...

  4. MySQL出现慢日志超过2秒_MySQL慢日志功能分析及优化增强

    本文由  网易云发布. MySQL慢日志(slow log)是MySQL DBA及其他开发.运维人员需经常关注的一类信息.使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据.本 ...

  5. mysql慢日志查询的阈值_mysql慢日志查询

    慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句.例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志 ...

  6. 性能问题从发现到优化一般思路

    1 文章概述 技术系统有一个发展过程,在业务初期主要是实现业务功能和目标,由于数据和访问量都不大,所以性能问题并不作为首要考虑. 但是随着业务发展,随着数据和访问量增大甚至激增,造成例如首页五秒钟才能 ...

  7. 通过页面埋点做监控却不影响性能?解密ARMS前端监控数据上报技术内幕

    摘要: 本文将为您介绍,在采集多类日志数据的情况下,阿里云业务实时监控服务(ARMS)之前端监控如何优化日志上报 前端监控 (又叫UEM,User Experience Management, 用户体 ...

  8. 别再乱打日志了,这份 Java 日志规范,应有尽有,建议收藏!

    1 简介 在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方.写好程序的日志可以帮助我们大大减轻后期维护压力.在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往 ...

  9. 别再乱打日志了,这份 Java 日志规范,应有尽有,建议收藏!!

    1.简介 在程序中写日志是一件非常重要,但是很容易被开发人员忽视的地方.写好程序的日志可以帮助我们大大减轻后期维护压力.在实际的工作中,开发人员往往迫于巨大时间压力,而写日志又是一个非常繁琐的事情,往 ...

最新文章

  1. 再来一个吊打百度网盘的开源神器,还是99年妹子开发的
  2. ICallbackEventHandler 前后台无刷新交互
  3. boost::mp11::mp_any相关用法的测试程序
  4. STM32F412应用开发笔记之一:初识NUCLEO-F412ZG
  5. Openshift 4.4 静态 IP 离线安装系列:初始安装
  6. 测试唯一ID支持多大的并发量
  7. 高性能MySQL-3rd-(五)创建高性能索引
  8. 事半功倍系列之javascript (转载)
  9. 服务器虚拟化嵌套,VMware虚拟机配置嵌套虚拟化
  10. Linux 设置系统时间和时区2.Ubuntu
  11. SpringBoot4.5.2 整合HikariCP 数据库连接池
  12. react根据中文获取拼音_学前家长建议收藏:你要的「趣味拼音课」来了
  13. Eclipse的SVN插件经常出错
  14. [转]cocos2d-x场景切换时内存过高导致crash解决方法
  15. Blackrock的思考与启示
  16. 【Codecs系列】AVS+(AVS1 P16)解码器
  17. Coded UI Test 常见问题总结
  18. Linux下使用FastDFS
  19. 【VBA】VBA定时运行程序
  20. 【技术分享】Windows10下安装深度学习常用软件教程分享

热门文章

  1. springboot mybatis常见异常及处理方法
  2. Linux下Centos7以rpm方式离线安装MySQL5.7教程以及部分报错解决方案
  3. 腾讯信息流推荐业务实践:内容分发场景的多目标架构实践
  4. 2022年引领全球增长的60大技术:机会、增长、投资、洞察
  5. nvidia-smi每0.1s实时显示显存使用情况,且数字变化处有白底
  6. Python实战从入门到精通第十三讲——返回多个值的函数
  7. ACL2021 | 信息抽取相关论文
  8. 时钟服务器地址_时钟同步 Chrony 教程
  9. python读取git日志_使用python分析git log日志示例
  10. Leetcode每日一题:134.gas-station(加油站)