zoukankan      html  css  js  c++  java
  • MySQL: InnoDB存储引擎

    一.MYSQL 版本:

    Variable_name: version
            Value: 5.5.52-MariaDB

    Innodb version

    5.5.49-MariaDB-38.0

    内容增加compression、dynamic、linux AIO、多回滚段、全文索引、在线索引添加;

    二.MYSQL体系

    内存池:

    • 维护所有进程/线程需要访问多个数据结构
    • 缓存磁盘上数据,脏页checkpoint磁盘前数据缓存
    • 重做日志redo log缓冲

    image

    后台线程:

    • Master Thread

    核心的后台线程,主要将缓冲池中的数据换新到磁盘中,保证数据一致性。脏页刷新,合并插入缓冲,UNDO页(数据修改之前备份的数据用于rollback)

    • IO Thread

    Async IO (write,read,insert buffer,log) InnoDB 1.0.X后read write 分别增大4个。

    可以通过Innodb_read_io_threads和innodb_write_io_threads

    命令:

    show variables like ‘INNODB_%IO_THREADS’G;

    • Purge Thread

    清除线程,当事务被提交时候undo log就是不在需要,因此需要回收,故设立单独线程,减缓master thread 压力,提高存储性能

    数据库配置文件添加独立命令启动purge thread:

    [mysqld]

    innodb_purge_threads=1

    innodb 1.2 后可以设置4个purge threads

    • Page Cleaner Thread  

    InnoDB1.2后面 脏页刷入磁盘单独放到一个线程完成减轻master thread 压力,有利于查询阻塞线程和提高存储引擎的性能。

    后台线程作用:

    1. 负责刷新内存池中的数据,保证缓存中是最近的数据
    2. 修改后的数据文件刷新到磁盘
    3. 保证数据库发生异常的情况下Innodb恢复到正常运行状态

    内存:

    缓冲池:

    是一块内存区域,为弥补CPU和磁盘速度的鸿沟,先把读到页从磁盘→FIX到缓冲池中,下次读到相同页的时候先判断再命中!

    数据库修改页,首先修改缓冲池中的页,然后再一定的频率刷新到磁盘,通过checkpoint(可以配置频率)机制  间隔的刷新到磁盘。

    建议64位系统;

    缓冲池通过参数Innodb_buffer_pool_size

    show variables like 'innodb_buffer_pool_size'G;

    单位:字节

    image

    InnoDB 1.0.X 允许多个缓冲实例,每个页平均分配到不同缓冲池实例,减少数据库内存资源竞争增加并发,通过以下参数 innodb_buffer_pool_instances配置默认值为1.

    命令:

    show variables like 'innodb_buffer_pool_instances'G;

    image

    通过 show engine innodb status 查看整个存储引擎的缓冲池状态:略!

    MYSQL5.6开始可以通过下面表查询缓冲池状态:

    select  pool_id,pool_size,free_buffers,database_pages  from  INNODB_BUFFER_POOL_STATSG;

    image

  • 相关阅读:
    2020软件工程作业06
    2020软件工程作业05
    jdk13.0.2安装完成后,使用binjlink.exe 命令配置jre报错
    软件工程04(已报废)
    2020软件工程作业03
    软件工程问题解决清单
    软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
  • 原文地址:https://www.cnblogs.com/kingwwz/p/7543670.html
Copyright © 2011-2022 走看看