April 14, 2013

[MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程

尽管Mariadb以及Facebook在long long time ago就fix掉了这个臭名昭著的问题,但官方直到 MySQL5.6 版本才Fix掉,本文主要关注三点: 1.MySQL 5.6的性能如何 2.在5.6中Group commit的三阶段实现流程   新参数 MySQL 5.6提供了两个参数来控制binlog group commit: binlog_max_flush_queue_time 单位为微妙,用于从flush队列中取事务的超时时间,这主要是防止并发事务过高,导致某些事务的RT上升。 可以阅读函数MYSQL_BIN_LOG::process_flush_stage_queue 来理解其功能   binlog_order_commits 当设置为0时,事务可能以和binlog不相同的顺序被提交,从下面的测试也可以看出,这会稍微提升点性能,但并不是特别明显.   性能测试 老规矩,先测试看看性能 sysbench, 全内存操作,5个sbtest表,每个表1000000行数据   基本配置: innodb_flush_log_at_trx_commit=1 table_open_cache_instances=5 metadata_locks_hash_instances = 32 metadata_locks_cache_size=2048 performance_schema_instrument = ‘%=on’ performance_schema=ON innodb_lru_scan_depth=8192 innodb_purge_threads = 4   关闭Performance Schema consumer: mysql> update setup_consumers set ENABLED = ‘NO’; […]