May 13, 2013

[MySQL 5.6] page cleaner线程的效率问题

最近在测试5.6.11的写性能,当我完成一项测试,关闭workload,习惯性设置innodb_max_dirty_pages_pct为0,然后等待脏页刷完再shutdown。   发现存在刷脏的抖动:   time      flushed    Innodb_data_written 11:49:57  3692        117.3m 11:49:58  1125        33.5m| 11:49:59  4187        134.6m 11:50:00  1241         35.0m 11:50:01  4076        127.4m   从pstack的采样结果来看,page cleaner线程频繁出现这样的backtrace。 buf_flush_page_cleaner_thread->page_cleaner_sleep_if_needed->os_thread_sleep 加了两个计数来监控,也发现page cleaner线程平均sleep时间过长(750,000 ms 左右)。 那么为什么会出现波动呢? 检查发现,机器上有一个heartbeat脚本每隔两秒钟更新一条记录。这会导致如下条件成立: 2385                 if (srv_check_activity(last_activity) 2386                     […]