我在两台机器(主要是myISAM表和基于语句的复制)之间的MySQL 5.5复制性能方面遇到严重问题。二进制日志和mysql数据目录均位于同一Fusion ioDrive上。
最近,当我们需要暂停复制大约2秒钟时,这个问题是一个大问题。3小时。没有其他负载,又花了大约10个小时再次赶上。
如何提高复制性能?机器B基本上是空闲的(很少,IO,16个中的2个内核已用完),因为只有1个mySQL线程正在写入数据。这是我的一些想法:
- 切换到基于行的复制。在测试中,这只会产生10-20%的性能提升
- 使用多线程复制升级到mySQL 5.6。我们可以轻松地将数据拆分到单独的数据库中,而基准测试似乎表明这会有所帮助,但是代码似乎还没有准备就绪。
- 一些有助于加速复制的配置变量
主要问题是,如果在暂停3小时后需要10个小时才能赶上,那么这意味着复制正在10个小时内写入13个小时的数据,或者能够以130%的数据输入速度进行写入。在不久的将来,至少要在Master计算机上进行两次写入,因此迫切需要一种提高复制性能的方法。
机器A:
- 主
- 24GB内存
- 1.2TB Fusion 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 Fusion 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