IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:数据库锁

共 2 篇相关文章

IT 累计浏览 4,417

MySQL 中 QueryCache 的锁模型

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

IT 累计浏览 2,611

Oracle 11G的DDL_LOCK_TIMEOUT参数

这篇讲的是Oracle 11g中一个实用但容易被忽略的新特性:`DDL_LOCK_TIMEOUT`参数。 在Oracle 11g之前,当一条DDL语句(如`ALTER TABLE`)试图修改一个已被其他事务锁定的对象时,数据库会立即返回“资源正忙”的错误,需要应用程序捕获并重试,这在并发场景下往往不够灵活。 `DDL_LOCK_TIMEOUT`参数改变了这一行为。它允许DBA为DDL操作设置一个等待锁的超时时间(单位为秒)。配置后,DDL语句会“耐心”等待指定时间,而非立即失败。如果在超时时间内锁被释放,DDL便成功执行;若超时仍未获得锁,则返回错误。这对于在维护窗口或高并发OLTP系统中执行结构变更提供了极大便利,避免了因短暂锁冲突导致的脚本执行失败。 它的设置非常直接,既可以在会话级别通过`ALTER SESSION`命令临时调整,也可以在系统级通过`ALTER SYSTEM`设置一个默认值。相比编写复杂的重试逻辑,利用这个参数能让DDL操作更加优雅和可控,是DBA工具箱中一个值得掌握的“小而美”的改进。