近期评论

mysql性能调优之log

mysql调优涉及到很多方面,网上有很多的调优参数的帖子或博客,看起来都是浮云,有些明显是错误的,或者砍掉不用的,无效的,竟然也在那样的博客里面到处复制粘贴。

曾经我问过一个DBA,mysql主从同步延如何解决,这个工作五年以上的DBA竟然告诉我说增加线程数量可以提高同步效率,现在看来,我只有呵呵。且看我之前写过一段以源码为最终依据的技术分享:

#对于mysql5.6.1以前的版本部署在slowloris系统上时这个参数才有意义
#参见mysql5.6.23源码, vim ./mysql-5.6.23/sql/sys_vars.cc
#找到第2425到2440行
#/*
# thread_concurrency is a no-op on all platforms since
# MySQL 5.1. It will be removed in the context of
# WL#5265
#*/
#static Sys_var_ulong Sys_thread_concurrency(
# “thread_concurrency”,
# “Permits the application to give the threads system a hint for “
# “the desired number of threads that should be run at the same time. “
# “This variable has no effect, and is deprecated. “
# “It will be removed in a future release. “,
# READ_ONLY GLOBAL_VAR(concurrency),
# CMD_LINE(REQUIRED_ARG, OPT_THREAD_CONCURRENCY),
# VALID_RANGE(1, 512), DEFAULT(DEFAULT_CONCURRENCY), BLOCK_SIZE(1),
# NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0),
# DEPRECATED(“”));
#网上至今还流传着很多帖子包含这个参数的调优
# thread_concurrency = 8

 

今天,在我的私人地盘,主要讲讲几个关于binlog日志的调优。

#在mysql5.6版本中,默认值是STATEMENT,可以在日志文件中看到sql,日志文件较小,但是在主从同步时,对于有些不确定的sql语句,
#使用STATEMENT,会提示警告,原因是不支持同步,使用ROW不会,但ROW会产生较多日志,容易磁盘占满,ROW格式看不到sql
#详细对比,参考http://codejm.iteye.com/blog/1540046
binlog-format=ROW

 
#mysql写入数据使用的是write系统调用,实质上写到内核缓冲区,当指定sync_binlog为1时,每次write后都会调用fdatasync同步到磁盘
#(fwrite是双缓冲,fflush刷新流缓冲区数据到内核,fdatasync刷新内核缓冲区数据到磁盘)
#显然效率比较低,参考值是1000,可以根据业务情况安排,
#sync_binlog越小对应的磁盘IO性能越差,但数据因为程序崩溃导致丢失的可能越小
#sync_binlog越大,则IO性能越好,但数据在程序崩溃时更容易丢失。
#默认值是0,表示由操作系统决定,隔一段时间写入到磁盘,具体多久暂不清楚
sync_binlog=1000

#停止写入binlog,默认值是1即启用写入binlog
#假定历史原因,主库表结构比从库多一个字段,如果是同步状态,去掉了主库的那个字段时,
#同步会报错,并卡住不再同步。怎么解决这个问题呢,执行即可set global sql_slave_skip_counter=1;
#这个参数通常不写在配置文件里,实时调整比较好
sql_log_bin=0

 
#这个参数在双主模式,或者A->B->C模式中时,B既为主又为从,必须启用该参数
log-slave-updates=1

#指定binlog忽略的数据库
binlog-ignore-db=mysql,test

#指定同步时忽略的数据库
replicate-ignore-db=test,mysql,information_schema

#跳过主从同步到错误
slave-skip-errors = 1022,1032,1062

#指定binlog过期天数,最大值99
expire_logs_days=0
master-info-file=/data1/mysql/log3306/master.info

#下面的3个参数有必要指定,因为默认relay log的命名规则是host_name-relay-bin.nnnnnn
#如果从库所在服务器的主机名改变了,主从同步会失败(出自官方文档)
relay-log=/data1/mysql/log3306/relaylog

85 Responses to “mysql性能调优之log”

Leave a Reply