MySQL主从滞后复制

我们公司正在使用TokuDB进行生产,而且我们还有很多问题试图减轻我们的奴隶的滞后。 非常奇怪,因为我们正在谈论的行数很less……但是有一些数据却滞后了。

从属是一个只读数据库。

欲了解更多信息,我们正在使用:

CPU :Intel(R)Core(TM)i5-2400 CPU @ 3.10GHz(4核)

内存 :16Gb

硬盘 :2Tb ST2000DM001(EXT4文件系统)

在这里你可以看到一些I / O性能输出。 我把它粘贴在这篇文章之外,因为我认为这样可以更容易阅读。

iostat -x 1输出,当我们有一个滞后的情况http://paste.laravel.com/bjv

fio ,用于磁盘I / O: http : //paste.laravel.com/bjG

我们做了几个磁盘调整,从史蒂文科罗娜的书http://www.scalingphpbook.com提取:

  • 将I / O调度程序更改为noop
  • closures/etc/fstab文件系统访问时间, noatimenodiratime
  • /etc/security/limits.conf增加了打开文件的数量:
 * soft nofile 999999 * hard nofile 999999 

一些调整,我们在configuration:

 # * Query Cache Configuration query_cache_limit = 0 query_cache_size = 0 query_cache_type = 0 innodb_file_per_table = 1 innodb_file_format = barracuda innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 1 innodb_log_file_size = 128M innodb_buffer_pool_size = 13500M innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_io_capacity = 180 innodb_thread_concurrency = 4 

奴隶

 # * Query Cache Configuration query_cache_limit = 0 query_cache_size = 0 query_cache_type = 0 innodb_file_per_table = 1 innodb_file_format = barracuda innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 2 sync_binlog = 1 innodb_log_file_size = 128M innodb_buffer_pool_size = 13500M innodb_read_io_threads = 16 innodb_write_io_threads = 16 innodb_io_capacity = 180 innodb_thread_concurrency = 4 

我认为这已经解决了,由于@ symcbean的帮助。

我禁用障碍,设置数据=有序,使用asynchronous提交和校验和。 最后,我们迁移到MariaDB,但仍然有TokuDB

我忘了提及,我们也设置tokudb_cache_size = 8G ,因为TokuDBbuild议,50%的物理内存