2台のマシン間でのMySQL 5.5レプリケーションのパフォーマンスに重大な問題があります。ほとんどがステートメントベースのレプリケーションを備えたmyISAMテーブルです。バイナリログとmysqlデータディレクトリは両方とも同じFusion ioDriveにあります。
この問題は、レプリケーションを約1時間停止する必要がある最近の大きな問題でした。3時間。他の負荷なしで再び追いつくのに約10時間かかりました。
レプリケーションのパフォーマンスを向上させるにはどうすればよいですか?マシンBは、1つのmySQLスレッドだけがデータを書き込んでいたため、基本的にはアイドル状態です(ほとんど、IO、16個のうち最大2個のコア、多くの空きRAM)。ここに私が持っていたいくつかのアイデアがあります:
- 行ベースのレプリケーションに切り替えます。テストでは、これによりパフォーマンスが10〜20%向上しました。
- マルチスレッドレプリケーションを使用してmySQL 5.6にアップグレードします。データを簡単に個別のデータベースに分割することができ、ベンチマークはこれが役立つことを示しているように見えますが、コードは生産準備が整っていないようです。
- レプリケーションの高速化に役立ついくつかの構成変数
主な問題は、3時間休止した後、10時間かかると、レプリケーションは10時間で13時間のデータを書き込むか、または入ってくるデータの速度の130%で書き込むことができることを意味します。近い将来、マスターマシンで少なくとも2回の書き込みが行われるため、レプリケーションパフォーマンスを改善する方法が切実に必要です。
マシンA:
- 主人
- 24GBラム
- 1.2TB Fusion ioDrive2
- 2x 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
- 2x 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