文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL45讲之更新缓存 - flowers

2018-03-28 23:57

关注

MySQL45讲之更新缓存 - flowers

本文介绍MySQL的更新缓存Change Buffer,以及唯一索引和普通索引如何选择。

前言

本文介绍MySQL的更新缓存Change Buffer,以及唯一索引和普通索引如何选择。

唯一索引和普通索引的选择

查询过程

唯一索引下,查询索引树,找到第一条匹配的行就返回;
普通索引下,查询索引树,找到第一条匹配的行之后,继续往下遍历,直到第一条不匹配的行为止,再返回。

即使匹配的行跨了数据页,但一个数据页默认16KB,每行只存储一个key且是整数,可以存储近千个。那么普通索引下,最多也是多加载一次数据页。所以唯一索引和普通索引的查询效率基本相同。

更新过程

首先介绍下MySQL的更新缓存Change Buffer,它使用的是MySQL Buffer Pool的存储空间,可以设置Change BufferBuffer Pool中的占比,MySQL5.6默认为25%,最多可以开到50%

顾名思义,Change Buffer就是用来存储更新操作的,使得更新操作不需要加载对应的数据页,直接更新到内存。当对Change Buffer中的行进行查询时,就会将原始数据页加载到内存,并将缓存应用到原始数据页,这个就是merge过程。Change Buffermerge触发时机:

Change Buffer的刷盘触发时机:

你或许会疑问“万一在刷盘之前数据库宕机了,那之前的更新不就丢失了么?”

答案是否。简单分析是,因为将更新操作写到Change Buffer后,还会将更新操作写到redo log并持久化到磁盘,数据库宕机重启之后,会将之前的更新缓存数据恢复到内存。

具体分析如下:
(1)change buffer写入,redo log虽然做了fsync但未commit,binlogfsync到磁盘,这部分数据丢失

(2)change buffer写入,redo log写入但没有commit,binlog以及fsync到磁盘,先从binlog恢复redo log,再从redo log恢复change buffer

(3)change buffer写入,redo logbinlog都已经fsync.那么直接从redo log里恢复。

接下来分析两种索引下的更新操作:
唯一索引下,查询索引树,加载对应的数据页到内存,判断是否违反一致性约束,再更新;
普通索引,查询索引树,直接更新内存中的Change Buffer

因为唯一索引需要判断更新操作是否违反一致性约束,所以必须加载数据页,也就用不到Change Buffer,即Change Buffer只用于普通索引。

从上面的分析可见,在更新多于读取操作的情况下,普通索引的更新操作效率要高于唯一索引。但如果是更新之后就有查询的场景,那么Change Buffer不但没有起到提效作用,反而占用的缓冲空间。所以,这种情况下,一般会关闭Change Buffer来避免它的副作用。

总结

总结来说,如果业务需要数据库来对数据进行唯一性约束,那么优先还是考虑唯一索引;否则,如果是更新远多于读取操作的业务场景,比如归档,日志等,考虑用普通索引代替唯一索引,可以提高内存命中率和提高更新效率。但如果是更新之后就有查询的场景,则建议关闭Change Buffer,来避免它的副作用。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯