咱们简单交流下InnoDB master thread学习,有兴趣的朋友能够参考<<MySQL技术内蒙--InnoDB存储引擎第二版>>html
void master_thread(){ goto loop; loop: for (int i=0;i<10;i++){ thread_sleep(1) //sleep 1 second-->每秒执行操做(负载在状况下会延迟) do log buffer flush to disk //重作日志缓冲刷新到磁盘,即便这个事务没有提交(老是) if ( last_ten_second_ios < 5% innodb_io_capacity) //若是当前的10次数小于(5% * 200=10)(innodb_io_capacity默认值是200) do merger 5% innodb_io_capacity insert buffer //执行10个合并插入缓冲的操做(5% * 200=10) if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //若是缓冲池中的脏页比例大于innodb_max_dirty_pages_pct(默认是75时) do buffer pool plush 100% innodb_io_capacity dirty page //刷新200个脏页到磁盘 else if enable adaptive flush //若是开户了自适应刷新 do buffer pool flush desired amount dirty page //经过判断产生redo log的速度决定最合适的刷新脏页的数量 if ( no user activity ) //若是当前没有用户活动 goto backgroud loop //跳到后台循环 } //每10秒执行的操做 if ( last_ten_second_ios < innodb_io_capacity) //若是过去10内磁盘IO次数小于设置的innodb_io_capacity的值(默认是200) do buffer pool flush 100% innodb_io_capacity dirty page //刷新脏页的数量为innodb_io_capacity的值(默认是200) do merger 5% innodb_io_capacity insert buffer //合并插入缓冲是innodb_io_capacity的5%(10)(老是) do log buffer flush to disk //重作日志缓冲刷新到磁盘,即便这个事务没有提交(老是) do full purge //删除无用的undo页 (老是) if (buf_get_modified_ratio_pct > 70%) //若是缓冲池中的胜页比例大于70% do buffer pool flush 100% innodb_io_capacity dirty page //刷新200个脏页到磁盘 else do buffer pool flush 10% innodb_io_capacity dirty page //不然刷新20个脏页到磁盘 goto loop backgroud loop: //后台循环 do full purge //删除无用的undo页 (老是) do merger 5% innodb_io_capacity insert buffer //合并插入缓冲是innodb_io_capacity的5%(10)(老是) if not idle: //若是不空闲,就跳回主循环,若是空闲就跳入flush loop goto loop: //跳到主循环 else: goto flush loop flush loop: //刷新循环 do buf_get_modified_ratio_pct pool flush 100% innodb_io_capacity dirty page //刷新200个脏页到磁盘 if ( buf_get_modified_ratio_pct > innodb_max_dirty_pages_pct ) //若是缓冲池中的脏页比例大于innodb_max_dirty_pages_pct的值(默认75%) goto flush loop //跳到刷新循环,不断刷新脏页,直到符合条件 goto suspend loop //完成刷新脏页的任务后,跳入suspend loop suspend loop: suspend_thread() //master线程挂起,等待事件发生 waiting event goto loop; }
MySQL 5.6 InnoDB 存储引擎结构图: mysql
总结:MySQL5.6中InooDB存储引擎不管是性能和功能都比以前版本改善了很多,因此建议你们使用,至关不错的一个版本^.^ios
想了解更多于InnoDB相关内容,能够参考《MySQL技术内幕 InnoDB存储引擎》 做者姜 承尧 的博客:http://insidemysql.sinaapp.com/article/4.html/innodbsql
做者:陆炫志app 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111ide 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归做者全部,欢迎转载,但请保留该声明。oop |