May 15, 2013

[MySQL 5.6] double write buffer的几个关键函数

一个double write buffer 有2MB, 共128个page,在MySQL 5.6中, 默认有120个page用于批量刷新(如 LRU Flush 或者FLUSH LIST FLUSH),剩下的8个Page用于单个page的flush。 在DEBUG版本下,120是可以通过参数innodb_doublewrite_batch_size来配置的,好吧。我已经不安分的把DEBUG宏给去掉了。 全局对象buf_dblwr, 对应结构体为buf_dblwr_t: ib_mutex_t  mutex 互斥量 ulint block1 第一个doubewrite 块(64个page)的page no ulint block2 第二个double write 块的page no ulint first_free 在write_buf中第一个空闲的位置 ulint s_reserved  为单个page刷新预留的slot数,当flush类型为BUF_FLUSH_SINGLE_PAGE时,会进入到函数buf_dblwr_write_single_page来写一个Page  ulint b_reserved  为batch flush 预留的slot数 ibool*  in_use 用于标记一个slot是否被使用,只用于single page flush  ibool batch_running  当设置为TRUE时,表明有一次batch flush正在进行 byte*  write_buf double write buffer在内存的缓存,以UNIV_PAGE_SIZE对其 byte*  […]