MySQL 中 QueryCache 的锁模型
这篇直接回应了一个在技术社区中常见的疑问:MySQL 的 Query Cache(QC)使用的是“全局锁”还是“表锁”?作者没有停留在简单的二选一,而是深入到实现层面,厘清了 QC 的锁模型。 关键点在于,QC 的锁并非传统意义上的、针对整个查询或某张表的锁。它实际上是一个更细粒度的“锁段”(lock segment)机制。当一个查询被解析并需要访问 QC 时,它会根据查询语句的哈希值定位到特定的内存段,然后尝试获取该段上的锁。这意味着,只要两个查询的哈希值不同(即查询不同),它们就可以并发地读写 QC 中不同的内存段,互不干扰。 这解释了为什么在某些高并发场景下,QC 不会像全局锁那样成为瓶颈。但同时,哈希冲突(不同查询映射到同一段)或对同一内存段的竞争,依然会导致串行化等待。作者的剖析,帮助读者超越了“是或不是”的简单判断,去理解锁竞争的实质粒度,这对于分析具体业务下的 QC 性能瓶颈非常有指导意义。