InnoDB体系架构总结(一)

 缓冲池: 

    是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库中读取的页数据会存放到缓冲池中,下次再读取相同页的时候,会首先判断该页是否在缓冲池中。对于数据库中页的修改操作,会首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。缓冲池中缓存的数据页有 索引页,数据页,UNDO页等。

show variables like 'innodb_buffer_pool_size'; #查看缓冲池大小

 重做日志:

  主要是用来实现事务的持久性,当系统由于不确定的原因奔溃之后,InnoDB存储引擎会使用重做日志恢复到掉电前的的状态,来保证数据的完整性。由两部分组成:一是内存中的重做日志缓冲(redo log buffer),是易失的;二是重做日志文件(redo log file),是持久的。InnoDB存储引擎会首先将重做日志信息放到缓冲区,然后以一定频率将其刷新到重做日志文件中。记录了对于InnoDB存储引擎的事务日志。

  事务提交时必须先将该事务的所有日志写入重做日志文件进行持久化,待事务的COMMIT操作完才算完成。这里的日志指的就是重做日志。在InnoDB存储引擎中,由redo log 和 undo log.

show variables like 'innodb_log_buffer_size'; #查看重做日志缓冲
二进制日志:
  记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作。主要用户数据复制,如主从复制中。

show variables like 'binlog_cache_size'; #二进制日志缓冲文件大小
在支持事务的存储引擎中,所有未提交的二进制日志会被记录到一个缓存中,等到该事务提交时,
会直接将缓冲中的二进制日志写入到二进制日志文件中。这个配置是由变量 binlog_cache_size 决定的。
binlog_cache_size 是基于session的。

 

InnoDB 事务

  redo log 是InnDB保证事务ACID属性的重要机制 主要流程为

1.将数据读入InnoDB buffer pool ,并对相关记录加独占锁

2.将UNDO信息写入undo表空间的回滚段中

3.更改缓存页中的数据,并将更新记录写入redo buffer中

4.提交时,根据innodb_flush_log_at_trx_commit 的设置,将不同的方式将
redo_buffer中的更新记录刷新到InnoDB redo log file中,然后释放独占锁

5.最后 后台IO线程根据需要择机将缓存中更新过的数据刷新到磁盘文件中

#show engine innodb status 命令查看当前日志的写入情况

InnoDB内存优化

innodb_buffer_pool_size #存储表数据和索引数据的最大缓存 在保证操作系统和其它程序有足够内存可用的情况下 innodb_buffer_pool_size的值越大 缓存命中率越高 访问InnoDB表需要的磁盘I/O就越少 性能也就越高
innodb_log_buffer_size #决定InnoDB 重做日志缓存池的大小 对于可能产生大量 更新记录的大事务 可增加其大小 避免在事务提交前 就执行不必要的日志写入磁盘操作

InnoDB应用优化

  作用:存储select查询的文本和结果,若下次收到相同查询,会从查询缓存中直接得到结果,而不再需要解析和查询

       更新:当表结构和数据更改后,查询缓存值的相关条目被清空

原文地址:https://www.cnblogs.com/alin-qu/p/8012457.html