• Innodb的启动


    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 + 1];
                            /*!< 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. 后台线程

    ......未完待续。

  • 相关阅读:
    高性能分布式计算与存储系统设计概要
    .NET核心代码保护策略
    Web 通信 之 长连接、长轮询(long polling)
    C++数据结构之二叉查找树(BST)
    T4:T4 笔记 + Trait 示例
    腾讯2014软件开发
    CSS选择器从右向左的匹配规则
    Js面向对象编程
    Js杂谈-正则的测试与回溯次数
    Microsoft Message Analyzer (微软消息分析器,“网络抓包工具
  • 原文地址:https://www.cnblogs.com/xpchild/p/3948372.html
Copyright © 2020-2023  润新知