두 컴퓨터 사이에서 MySQL 5.5 복제 성능에 심각한 문제가 있습니다. 주로 명령문 기반 복제가있는 myISAM 테이블입니다. 이진 로그와 mysql 데이터 디렉토리는 모두 동일한 Fusion ioDrive에 있습니다.
이 문제는 최근에 복제를 일시 중지해야 할 때 큰 문제였습니다. 3 시간. 다른 하중없이 다시 잡는 데 약 10 시간이 걸렸습니다.
복제 성능을 어떻게 향상시킬 수 있습니까? 머신 B는 기본적으로 유휴 상태입니다 (작은 IO, 16 개 코어 중 최대 2 개, 많은 여유 RAM). 단 하나의 mySQL 스레드 만 데이터를 쓰고있었습니다. 내가 가진 아이디어는 다음과 같습니다.
- 행 기반 복제로 전환하십시오. 테스트에서 이것은 10-20 %의 성능 향상만을 가져 왔습니다
- 다중 스레드 복제를 사용하여 mySQL 5.6으로 업그레이드하십시오. 우리는 데이터를 별도의 데이터베이스로 쉽게 분리 할 수 있었고 벤치 마크에서 이것이 도움이 될 것으로 보이지만 코드는 생산 준비가되지 않은 것으로 보입니다.
- 복제 속도를 높이는 일부 구성 변수
가장 큰 문제는 3 시간 동안 일시 중지 한 후 따라 잡는 데 10 시간이 걸리면 복제가 10 시간 내에 13 시간의 데이터를 쓰거나 들어오는 데이터 속도의 130 %에서 쓸 수 있다는 것입니다. 머지 않아 마스터 시스템에 최소 두 번의 쓰기 작업이 필요하므로 복제 성능을 향상시킬 수있는 방법이 절실히 필요합니다.
기계 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