在 MySQL架构(二)SQL 更新语句是如何执行的?中,小鱼介绍了SQL 更新语句的执行流程,文章中考虑初次介绍MySQL 架构,涉及到服务层的流程并没有展开介绍。
于是今天把坑填了,本文将以更新语句执行过程对server 层的操作进行展开讲解。
在 InnoDB 存储引擎下,SQL 执行的缓存机制主要涉及两种类型的缓存:查询缓存和缓冲池(Buffer Pool)。
查询缓存会存储已经执行过的 SELECT 语句及其结果集,如果再次执行相同的 SELECT 语句,系统会直接返回缓存中的结果,而不需要重新执行查询。
在 InnoDB 中,默认情况下是不启用查询缓存的,因为对于更新较为频繁的数据表(或者高并发场景下)而言,缓存会频繁失效,若此时使用查询缓存容易对 MySQL 性能产生负面影响,因此通常情况下不建议使用查询缓存。
查询缓存在 MySQL架构(二)SQL 更新语句是如何执行的?中已经作过介绍,可以在这篇文章更详细的了解查询缓存。
缓冲池是 InnoDB 存储引擎中最重要的缓存机制之一,主要用于缓存数据页。
数据页page是 InnoDB 存储引擎中的最小存储单位,每个数据页的大小通常为 16 KB。
当执行 UPDATE
语句时,首先会将相关的数据页加载到缓冲池中,然后在缓冲池中进行修改。如果数据页已经存在于缓冲池中,那么更新操作会直接在缓冲池中进行,而不需要从磁盘中读取数据,从而提高了更新操作的性能。
更详细的流程如下图所示:
MySQL 的这套缓存机制看着十分复杂,但是能确保MySQL 每个更新操作都是先更新内存,再顺序写入日志文件,能保证MySQL 在各种异常情况下的数据一致性。