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

标签:一致性读

共 3 篇相关文章

IT 累计浏览 3,310

InnoDB的多版本一致性读的实现

这是一篇源码分析类文章,深入探讨了InnoDB如何通过MVCC机制实现无锁一致性读。作者从“读操作如何不被写操作阻塞”这一核心问题出发,详细剖析了其实现的三个支柱:隐藏字段、undo log版本链以及ReadView。文章清晰地阐述了每行数据在更新后,旧版本如何通过回滚指针形成一条版本链,而ReadView则像一份“快照清单”,通过比较事务ID与清单中活跃事务列表的关系,来决定哪个版本对当前事务可见。特别值得注意的是,文中对ReadView的生成时机(在事务执行过程中的每次一致性读)及其可见性判断的精确规则进行了拆解,揭示了InnoDB如何在不加锁的前提下,为不同隔离级别(如可重复读)提供精确的快照读。这种基于版本的并发控制思路,巧妙平衡了数据一致性与系统高性能,对于理解数据库内核原理和优化慢查询都大有裨益。

IT 累计浏览 3,642

Oracle In-memory Undo运作原理

这篇文章讲的是Oracle中undo机制的演进,特别是从传统undo到In-Memory UNDO(IMU)特性的核心原理与差异。 传统undo通过回滚段管理,其信息必须先读入缓冲区并产生redo,这带来了IO和日志写入开销。IMU的巧妙之处在于,它直接在shared pool中为每个事务分配私有的内存空间作为undo buffer,这使得一致性读操作可以在内存中高效完成,而无需频繁访问磁盘上的undo块。 文章关键点在于澄清了一个常见误解:IMU模式下,undo信息依然会被写入redo log以确保崩溃恢复,但写入时机和方式发生了变化。它允许undo信息在内存中停留更久,并采用批量合并的方式写入,显著减少了redo的产生量。同时,IMU与10g引入的private redo strands特性协同工作,进一步提升了事务处理的并发性能。 作者通过专利文献、性能专著及个人实验,剖析了这个相对隐蔽的特性。值得注意的是,IMU在RAC等复杂环境下可能被自动禁用,了解其适用边界对优化数据库性能很有帮助。

IT 累计浏览 1,826

(oracle)逻辑读异常(主键查询)

作者从一个异常的数据库监控现象切入:用主键查询本应是轻量级操作(预期4个左右逻辑读),实际却飙升至5301个。这篇笔记详细记录了这场“小异常”背后的排查过程。 作者首先通过查看执行计划等手段,锁定问题并非SQL本身,而是底层表结构和数据的异常。随着排查深入,发现根源在于表上存在不合适的索引和过期的统计信息,这导致优化器在看似简单的主键查询中,生成了低效的访问路径,引发了大量不必要的逻辑读。文章不仅展示了问题表象,更剖析了从发现异常到定位到索引与统计信息这个“真凶”的完整排查链条。 对于DBA和后端开发来说,这个案例是个很好的提醒:即使是基础的查询,其性能也可能被环境因素“扭曲”。作者最终通过修正索引和更新统计信息恢复了查询的正常效率,为类似问题的排查提供了实用参考。