MySQL 主从滞后复制

MySQL 主从滞后复制

我们公司正在生产中使用TokuDB,我们在尝试减轻从属服务器的延迟方面遇到了很多问题。这很奇怪,因为我们谈论的行很少……但对于一些数据,它就会延迟。

从属是只读数据库。

如需更多信息,我们使用:

中央处理器:Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz(4 核)

内存: 16 GB

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

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

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

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

我们做了一些磁盘调整,摘自 Steven Corona 的书http://www.scalingphpbook.com

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

我们对配置做了一些调整:

掌握

# * 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

答案1

我认为这个问题已经解决了,这要归功于@symcbean 的帮助。

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

我忘了说了tokudb_cache_size = 8G,我们还按照 TokuDB 的建议设置了 50% 的物理内存

相关内容