Linux
MySQL主從滯後複製
我們公司正在
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
.- 關閉文件系統訪問時間,
noatime
並nodiratime
在/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 建議的那樣