Innodb的启动与关闭

1. 启动函数的流程

  innobase_start_or_create_for_mysql

启动的主要步骤包括:
  1. 初始化innodb的参数
  2. 初始化系统结构
    主要结构:srv_sys_t
  3. 加载或者创建文件
    如果是第一次启动,Innodb会创建系统表空间和log file
    如果是重启,Innodb会加载文件
  4. 恢复
    如果系统非正常关闭,则进入恢复过程
  5. 创建相关后台线程

2. 线程并发控制

我们先来看srv_sys的结构:

  

/** The server system struct */
struct srv_sys_t{
ib_mutex_t tasks_mutex; /*!< variable protecting the
tasks queue */
UT_LIST_BASE_NODE_T(que_thr_t)
tasks; /*!< task queue */
ib_mutex_t mutex; /*!< variable protecting the
fields below. */
ulint n_sys_threads; /*!< size of the sys_threads
array */
srv_slot_t* sys_threads; /*!< server thread table */
ulint n_threads_active[SRV_MASTER + ];
/*!< number of threads active
in a thread class */
srv_stats_t::ulint_ctr_1_t
activity_count; /*!< For tracking server
activity */
};

其中:所有的用户线程进入tasks队列, 所有的Innodb的后台线程在sys_threads数组中保存。

有了这个全局结构,就可以很好的控制Innodb的并发线程。

线程控制函数:

1. :srv_conc_enter_innodb

  所有使用Innodb资源的用户线程,调用这个函数,进行并发控制。
2. :srv_conc_force_exit_innodb:

  所有用户线程使用完资源后,退出并发线程(比如一个sql结束后)

3. 防止过度占用资源,为每一个事务设置了一个tickets,如果这个事务有过多的sql,就会递减ticket。

当tickets减少为0的时候,会sleep本线程,让出系统资源。

3. shutdown Innodb

innobase_shutdown_for_mysql:
  1. 刷新buffer pool,并写入最新的lsn到表空间的header。
  2. 关闭所有的后台线程。
  3. 释放所有的内存结构和空间。

4. 后台线程

......未完待续。

最新文章

  1. IDA插件栈字符串识别插件
  2. 重学JAVA基础(六):多线程的同步
  3. MSBI BigData demo—sqoop import
  4. python使用装饰器捕获异常
  5. nbtstat -a &lt;IP&gt; 会显示主机名、所在工作组等信息
  6. android ListView 中getview学习总结
  7. 硝烟中的scrum学习笔记 - 怎样制定Sprint计划(Plan Meeting)
  8. Win32 的dll导入
  9. ubuntu远程windows服务器
  10. 一把刀终极配置Win7/8版 v2.0 绿色版
  11. IOS SDWebImage实现基本原理详解(转载)
  12. ZOJ2150 Raising Modulo Numbers 快速幂
  13. Eclipse的优化
  14. jeecg开发环境搭建
  15. 面试题(一GC)
  16. Spring Boot(一):环境搭建,建立简单项目
  17. flask表单
  18. Asp.net core 学习笔记 ( Identity 之 Authentication )
  19. 1. EM算法-数学基础
  20. HTML5背景音乐的暂停与播放

热门文章

  1. JavaScript的常见事件和Ajax小结
  2. ORA-27102: out of memory并伴随OSD-00031的处理
  3. mybatis显示sql语句 log4j.properties配置文件
  4. 第一个js面向对象的小实验
  5. 让&lt;未将对象引用到实例&gt;见鬼去吧!
  6. 自己利用jQuery实现的win8图标浮动更新
  7. 3.5 spring-replaced-method 子元素的使用与解析
  8. Windows下的Memcache安装与测试教程
  9. 【leetcode】Divide Two Integers (middle)☆
  10. php的redis 操作类,适用于单台或多台、多组redis服务器操作