欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

你懂change buffer吗

发布时间:2024/2/28 编程问答 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 你懂change buffer吗 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

首先说下change buffer 是个啥?

为了减少对数据库的IO操作,将更新操作用change buffer保存起来。如果要访问刚刚更新的数据页,就会将数据页读取到内存中,然后执行 change buffer 中与这个页有关的操作。

这个东西在不同索引的情况下表现不同,让我们来瞅瞅。

对于唯一索引来说,所有的更新操作都要先判断这个操作是否违反唯一性约束。比如,要插入 (4,400) 这个记录,就要先判断现在表中是否已经存在 k=4 的记录,而这必须要将数据页读入内 存才能判断。如果都已经读入到内存了,那直接更新内存会更快,就没必要使用 change buffer 了。 因此,唯一索引的更新就不能使用 change buffer,实际上只有普通索引可以使用。

现在,你已经理解了 change buffer 的机制,那么我们再一起来看看如果要在这张表中插入一 个新记录 (4,400) 的话,InnoDB 的处理流程是怎样的。

第一种情况是,这个记录要更新的目标页在内存中。这时,InnoDB 的处理流程如下:

  • 对于唯一索引来说,找到 3 和 5 之间的位置,判断到没有冲突,插入这个值,语句执行结 束;
  • 对于普通索引来说,找到 3 和 5 之间的位置,插入这个值,语句执行结束。

这样看来,普通索引和唯一索引对更新语句性能影响的差别,只是一个判断,只会耗费微小的 CPU 时间。 但,这不是我们关注的重点。

第二种情况是,这个记录要更新的目标页不在内存中。这时,InnoDB 的处理流程如下:

  • 对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束;
  • 对于普通索引来说,则是将更新记录在 change buffer,语句执行就结束了。

将数据从磁盘读入内存涉及随机 IO 的访问,是数据库里面成本最高的操作之一。change buffer 因为减少了随机磁盘访问,所以对更新性能的提升是会很明显的。

change buffer 一般适应于写多读少的场景。如果我更新完就要读 性能也不会提升。

 

总结

以上是生活随笔为你收集整理的你懂change buffer吗的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。