Linux

MySQL主從滯後複製

  • November 21, 2012

我們公司正在TokuDB生產中使用,我們在嘗試減輕奴隸的滯後時遇到了很多問題。很奇怪,因為我們談論的是很少的行……但是有一些數據它會滯後。

從站是一個只讀數據庫。

有關更多資訊,我們正在使用:

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

記憶體:16Gb

硬碟: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

由於@symcbean 的幫助,我認為這已經解決了。

我禁用了障礙,設置數據=有序,使用非同步送出和校驗和。最後,我們遷移到 MariaDB,但仍然有 TokuDB

我忘了提到我們還設置tokudb_cache_size = 8G了 50% 的物理記憶體,正如 TokuDB 建議的那樣

引用自:https://serverfault.com/questions/450048