mysql InnoDB的Master Thread调度流程
2012-12-13 20:12
411 查看
InnoDB的主要IO操作都是在Master Thread(srv0srv.c)中完成的,所以分析InnoDB的IO调度,就一定要分析Master Thread线程。
下面是我画的一张流程图,标识了整个Master Thread的调度流程。红色部分是InnoDB Plugin/XtraDB对原有InnoDB引擎的改进。
每个Process文字中最下面的括号是进行这个操作的具体函数,可以参照源代码阅读本图。
顺便解释一下“插入缓冲”(Insert Buffer):InnoDB为了避免更新数据时更新索引损失太多性能,使用了这种称为Insert Buffer的方法来缓冲索引更新,对于非聚集索引(主键索引)、唯一索引的修改,不是每次都直接插入索引页,而是先判断要更新的这一页在不在内存中,如果不在则存入Insert
Buffer,按照Master Thread的调度规则来合并非唯一索引和索引页中的叶子结点,这样经常能减少更新索引的代价。为什么要求是非唯一索引(排除主键索引和唯一索引)呢?因为唯一索引要检查记录是不是存在,所以必须把修改的记录影响的索引页读出来才知道是不是唯一,这样Insert
Buffer就没意义了,反正要读出来,所以只对非唯一索引有效。
show innodb status中的“INSERT BUFFER AND ADAPITIVE HASH INDEX”里面显示了Insert Buffer的效果。
更正一部分,发现在刷新100个赃页后,InnoDB认为刷新耗时已经超过一秒了,无需等待,设置skip_sleep=TRUE,直接跳过os_pthread_sleep,进行下一次判断。
原文:http://www.penglixun.com/tech/database/innodb_master_thread.html
下面是我画的一张流程图,标识了整个Master Thread的调度流程。红色部分是InnoDB Plugin/XtraDB对原有InnoDB引擎的改进。
每个Process文字中最下面的括号是进行这个操作的具体函数,可以参照源代码阅读本图。
顺便解释一下“插入缓冲”(Insert Buffer):InnoDB为了避免更新数据时更新索引损失太多性能,使用了这种称为Insert Buffer的方法来缓冲索引更新,对于非聚集索引(主键索引)、唯一索引的修改,不是每次都直接插入索引页,而是先判断要更新的这一页在不在内存中,如果不在则存入Insert
Buffer,按照Master Thread的调度规则来合并非唯一索引和索引页中的叶子结点,这样经常能减少更新索引的代价。为什么要求是非唯一索引(排除主键索引和唯一索引)呢?因为唯一索引要检查记录是不是存在,所以必须把修改的记录影响的索引页读出来才知道是不是唯一,这样Insert
Buffer就没意义了,反正要读出来,所以只对非唯一索引有效。
show innodb status中的“INSERT BUFFER AND ADAPITIVE HASH INDEX”里面显示了Insert Buffer的效果。
更正一部分,发现在刷新100个赃页后,InnoDB认为刷新耗时已经超过一秒了,无需等待,设置skip_sleep=TRUE,直接跳过os_pthread_sleep,进行下一次判断。
原文:http://www.penglixun.com/tech/database/innodb_master_thread.html
相关文章推荐
- InnoDB的Master Thread调度流程
- mysql innodb master_thread伪代码整理
- innodb中master线程的调度的算法改进(mysql 5.6.26)
- mysql innodb master thread分析
- innodb中master线程的调度的算法改进(mysql 5.6.26)
- InnoDB存储引擎(engine)主线程(master thread)工作流程分析
- Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;
- innoDB 线程分析之Master Thread
- mysql 流程函数 存储引擎 InnoDB简单特性
- mysql5.5.19主从脚本(master-innodb,slave-myisam)
- Mess with innodb_thread_concurrency (mysql与多cpu)
- InnoDB的Master Thread工作原理
- mysql 流程函数 存储引擎 InnoDB简单特性
- 14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率:
- Mysql 版本引发的问题之thread_concurrency和innodb_thread_con
- 故障案例:主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server
- 【MySQL】MySQL同步报错-> received end packet from server, apparent master shutdown: Slave I/O thread: Failed reading log event, reconnecting to retry报错解决和分析
- 14.6.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB 主线程IO 速率:
- Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs
- 故障案例:主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server