mysql之innodb引擎的缓存理解

缓存是一个mysql数据库的一个重要概念,本文主要分析innodb引擎的几种缓存。

查询缓存:查询缓存主要是缓存select的查询结果,如果select查询的结果小于配置中设置的最小阀值,mysql会把结果缓存起来作为一个结果集,当下次有相同的select操作时(两次select中间没有数据的变更)查询缓存直接返回上次查询的结果,从而省去了select的分析,优化查找等操作。查询缓存需要频繁的置换内存和磁盘(或者缓冲池)中的数据,所以查询缓存并不是总能提高效率,如果是写频繁的操作完全可以禁止使用查询缓存。

缓冲池:innodb的缓冲池对数据库性能影响非常大,缓冲池包括数据页,索引页,插入缓冲,锁信息,数据字典信息等。数据页主要缓存数据库数据,innodb主要采用btree的索引方式,一级索引即存储索引值也存储实际的数据值,二级索引存储索引值和主键值。缓冲池应该设置的尽量大,占内存的50%-80%。缓冲池使用情况可以通过

show global status like '%buffer%'; 查询

日志缓存:用于存储还未即时持久话的数据。日志缓存可以使innodb批量的进行更改操作,提高效率。通过更改innodb_flush_log_at_trx_commit可以控制log的刷新方式。有0,1,2三个值可选,推荐2表示每秒钟刷新一次日志缓冲并且在mysql宕机的情况下仍然可以恢复。日志操作包括两部分,日志缓存写入到日志文件和日志文件的持久化。通常所说的一秒钟数据丢失是指日志缓存没来得及写入到日志文件中的数据。日志文件没有写入到持久化存储中的数据会在mysql启动时自行恢复。日志缓存写入到日志文件的操作会上锁(锁住日志缓冲);日志文件到持久化的操作是阻塞io操作。写入完成才会返回。

你可能感兴趣的:(mysql之innodb引擎的缓存理解)