在数据库安装完毕,对于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等等附加功能。

考虑到篇幅问题,这里就不介绍mslpatch给我们带来的更为详细的功能和使用,大家请参考官方介绍(http://www.mysqlperformanceblog.com/2008/04/20/updated-msl-microslow-patch-installation-walk-through/)

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

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

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

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

mysql binlog日志优化及思路相关推荐

  1. mysql开启binlog日志影响性能吗_mysql binlog日志优化及思路

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

  2. Mysql binlog日志及binlog恢复数据库操作

    初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...

  3. 设置自动清理mysql binlog日志和手动删除的方法

    MYSQL主从复制(replication)采用 RBR 模式后,binlog的格式为"ROW",能解决很多原先出现的主键重复问题. 在一个繁忙的master db server上 ...

  4. mysql binlog过期策略_MySQL binlog日志优化方案

    Binlog 相关参数及优化策略 我们首先看看Binlog 的相关参数,通过执行如下命令可以获得关于Binlog 的相关参数.当然,其中也显示出了" innodb_locks_unsafe_ ...

  5. 4 款 MySQL Binlog 日志处理工具对比,谁才是王者?

    作者 | stone-no1 来源 | https://blog.csdn.net/weixin_38071106/article/details/88547660 Canal 定位:基于数据库增量日 ...

  6. mysql binlog日志的三种模式

    1.statement level模式 每一条会修改数据的sql都会记录到master的bin-log中.slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行. ...

  7. MySQL binlog日志

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  8. MySQL bin-log 日志清理方式

    MySQL bin-log 作用 1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主服务 ...

  9. canal解析mysql日志异常_利用Canal解析mysql binlog日志

    一.安装包下载(canal.deployer-x.x.x.tar.gz  官方建议使用1.0.22版本) 二.解压文件 tar -zxvf canal.deployer-1.0.22.tar.gz - ...

最新文章

  1. python运行完不能显示图_【已解决】Python中通过Image的open之后,去show结果打不开bmp图片,无法正常显示图片...
  2. BZOJ 2748: [HAOI2012]音量调节【二维dp,枚举】
  3. Android之BroadcastReceiver的使用
  4. linux 后台计算,科学网-如何在Linux中做批处理和后台计算-张彦的博文
  5. redis-java客户端jedis测试
  6. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
  7. Java ArrayList set()方法与示例
  8. Java 算法 换零钞
  9. [linux-脚本]shebang(shabang #!)
  10. python爬房源信息_用python爬取链家网的二手房信息
  11. 防御暴力破解SSH攻击
  12. python掷骰子_掷骰子童芯派 python硬件编程(上传模式)
  13. Android逐帧动画的实现
  14. 百会ZOHO发布基于SaaS面向中小企业的CRM平台
  15. crt中 新建的连接存储在哪_SecureCRT永久保存配置的方法
  16. Go语言之工具Go Playground
  17. PGSQL创建管理员账号
  18. msp430发送pwm信号_msp430单片机实现PWM
  19. 计算机无法加载远程访问连接管理器服务,win7宽带连接提示无法加载远程访问连接管理器服务错误711怎么办...
  20. wifi 小程序 透传_微信小程序之一键连接wifi

热门文章

  1. 实验仪器参数关系表达与传递
  2. iOS.访问通讯录.02.写入联系人
  3. flash新闻图片轮转————c#+数据库解决
  4. 12.PHP_PDO数据库抽象层
  5. 通过修改EIP寄存器实现强行跳转并且注入DLL到目标进程里
  6. hdu2196 树形DP
  7. 【Android 插件化】VirtualApp 源码分析 ( 安装应用源码分析 | HomePresenterImpl 添加应用 | AppRepository.addVirtualApp )
  8. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )
  9. 【Android 安装包优化】WebP 图片转换 ( 使用 iSparta 转换 WebP 图片格式 | Google 提供的 libwebp 库 )
  10. leetcode(78)子集