MySQL: InnoDB存储引擎

一.MYSQL 版本:

Variable_name: version
        Value: 5.5.52-MariaDB
mysql

Innodb versionlinux

5.5.49-MariaDB-38.0 sql

内容增长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_STATS\G;

image

相关文章
相关标签/搜索