中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

原理介绍

高吞吐量下,可观察到MySQL中Buf_fetch_normal::get引起的rw_lock_s_lock_func热点,关键调用路径为buf_page_get_gen->Buf_fetch::single_page->Buf_fetch_normal::get。Buf_fetch_normal::get的功能,是获取目标数据页的位于buffer pool中的数据块指针,即通过(space_id,page_no)查询获得buf_block_t*,从而读写页内容。这个映射关系由一个hash表维护,称为page_hash,由hash_table_locks保护。rw_lock_s_lock_func热点即来自该hash_table_locks的加读锁操作。

将竞争激烈的锁对象进行分片,是常见的优化手段。MySQL源码中,已经通过分片来优化hash_table_locks,分片数量由srv_n_page_hash_locks控制,硬编码为16。

图1 hash_table_locks优化前后对比