我在两台机器之间的 MySQL 5.5 复制性能方面遇到了一个严重的问题,主要是带有基于语句的复制的 myISAM 表。二进制日志和 mysql 数据目录都位于同一个 Fusion ioDrive 上。
这个问题是最近的一个大问题,当时我们需要暂停复制大约。3小时。在没有其他负载的情况下再次赶上大约需要 10 个小时。
如何提高复制的性能?机器 B 基本上处于空闲状态(很少,IO,16 个内核中有 2 个已用尽,大量空闲 RAM),因为只有 1 个 mySQL 线程在写入数据。以下是我的一些想法:
- 切换到基于行的复制。在测试中,这仅产生了 10-20% 的性能提升
- 使用多线程复制升级到 mySQL 5.6。我们可以轻松地将数据拆分到单独的数据库中,基准测试似乎表明这会有所帮助,但代码似乎还没有准备好生产。
- 一些有助于加快复制速度的配置变量
主要问题是,如果在暂停 3 小时后需要 10 小时才能赶上,这意味着复制正在 10 小时内写入 13 小时的数据,或者能够以传入数据速度的 130% 写入。我期待至少在不久的将来在 Master 机器上进行双写,因此迫切需要一种提高复制性能的方法。
机器A:
- 掌握
- 24GB内存
- 1.2TB 融合 ioDrive2
- 2 个 E5620
- 千兆互连
my.cnf
:
[mysqld]
server-id=71
datadir=/data_fio/mysqldata
socket=/var/lib/mysql/mysql.sock
tmpdir=/data_fio/mysqltmp
log-error = /data/logs/mysql/error.log
log-slow-queries = /data/logs/mysql/stats03-slowquery.log
long_query_time = 2
port=3306
log-bin=/data_fio/mysqlbinlog/mysql-bin.log
binlog-format=STATEMENT
replicate-ignore-db=mysql
log-slave-updates = true
# Performance Tuning
max_allowed_packet=16M
max_connections=500
table_open_cache = 2048
max_connect_errors=1000
open-files-limit=5000
# mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections
key_buffer=4G
max_heap_table_size = 1G
tmp_table_size = 4G
myisam_sort_buffer_size = 256M
sort_buffer_size=4M
read_buffer_size=2M
query_cache_size=16M
query_cache_type=2
thread_concurrency=32
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
机器 B:
- 奴隶
- 36GB内存
- 1.2TB 融合 ioDrive2
- 2 个 E5620
- 千兆互连
my.cnf
:
[mysqld]
server-id=72
datadir=/data_fio/mysqldata
socket=/var/lib/mysql/mysql.sock
tmpdir=/data_fio/mysqltmp
log-error = /data/logs/mysql/error.log
log-slow-queries = /data/logs/mysql/stats03-slowquery.log
long_query_time = 2
port=3306
# Performance Tuning
max_allowed_packet=16M
max_connections=500
table_open_cache = 2048
max_connect_errors=1000
open-files-limit=5000
# mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections
key_buffer=4G
max_heap_table_size = 1G
tmp_table_size = 4G
myisam_sort_buffer_size = 256M
sort_buffer_size=4M
read_buffer_size=2M
query_cache_size=16M
query_cache_type=2
thread_concurrency=32
user=mysql
symbolic-links=0
plugin-load=archive=ha_archive.so;blackhole=ha_blackhole.so
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock