MYSQL主从延迟的优化

主要瓶颈是:从库的slave SQL thread 是单进程的。

对于从库复制拖延的问题解决方式:

        1. 牺牲安全性换性能: 设置 innodb_flush_log_at_trx_commit to 2; 设置 innodb_locks_unsafe_for_binlog

to 1; 设置 delay_key_write to ALL for MyISAM。

        2. 分析到底哪些SQL导致从库执行慢,想办法让其走外部数据通道。

例如:对一些高负荷的数据统计/归档等操作,用SELECT导入文件后,再LOAD到主库/从库。REPLACE INTO summary_db.summary_table (col1, col2, ...) SELECT col1, sum(col2, ...)  FROM ain_db.enormous_table GROUP BY col1;

        3. 在relay logs执行之前,其他程序在从库预抓取要执行变更的数据到缓存,使得replication io不用等待。例如 UPDATE sakila.film SET rental_duration=4 WHERE film_id=123;是relay log中需要执行的语句,在这之前执行 SELECT rental_duration FROM sakila.film WHERE film_id=123; 但是这种方法的应用的条件有:

                -在服务器端的I/O不吃紧的情况下,mysql的复制程序有自己的I/O瓶颈

                -数据量必须大于服务内存

                - MYSQL默认的storage要支持行级锁,例如innodb

        4. 如果是带宽有限影响同步,开启slave_compressed_ protocol可节省传输带宽

        5.MySQL Sandbox (带验证,在主机建立多个MYSQL进程,从而分散复制线程)

其中3、4都未使用过,待验证……


你可能感兴趣的:(MYSQL主从延迟的优化)