前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL change buffer 原理学习

MYSQL change buffer 原理学习

作者头像
AustinDatabases
发布2019-06-21 15:57:19
1.5K0
发布2019-06-21 15:57:19
举报
文章被收录于专栏:AustinDatabases

关于MYSQL 的change buffer 的说一说,为何,因为它可以加速你的写操作,意思就是 insert update delete 等操作,尤其是你的表有一堆索引的情况下,那必须要进行特殊的设置。

可能马上有一个声音,为什么是表有一堆索引的情况下,才要有特殊的设置。

1 索引与表是紧密的关系,插入,更新,删除一条记录,就会触发与表有关系的索引的操作,你可以将他们看做一个事务,如果其中有任何一个对索引的操作失败,则你的数据对表的操作也应该会失败。

2 对于表附加的索引的操作必然影响对源表的数据的操作速度,而DML操作会影响数据的读取和事务隔离性相关的性能,然后引起连锁反应,表插入的,更改的,删除的,慢了,则表的SELECT 的性能也必然受到影响。

3 当对表执行插入、更新和删除操作时,索引(非聚集索引)列的值通常是无序的,这需要大量的I/O来更新辅助索引。当相关页不在缓冲池中时,更改缓冲区将更改缓存到索引,从而通过不立即从磁盘读入页来避免昂贵的I/O操作。当页面加载到缓冲池中时,将合并已缓存的更改,然后将更新后的页面刷新到磁盘。

带来的好处,如果MYSQL 承担大量的DML操作,则change buffer是必不可少的,他的存在就是尽量减小I/O的消耗,通过内存进行数据的合并操作,将多次操作操作尽量变为少量的I/O操作。带来的坏处,就是change buffer 会使用innodb_buffer的空间,所以如果你内存少,那就....... 默哀3分钟。

说道这个东西,那自然必须要在MY.CNF 中调整一下参数配置。

具体有两个参数

1 innodb_change_buffering

这个参数决定了你的change buffer的用途,你是要吃咸的还是甜的,都在这里面了。具体的选择项

none

inserts

deletes

changes

purges

all

2 innodb_change_buffer_max_size

另一个选择项是对 buffer_pool 中的内存进行百分比的设置,默认是 25% 最大你可以设置 50%

3 innodb_change_buffering_debug

对于change buffer 如果造成问题,我们也需要第一时间从 ERRORLOG 汇总获知,所以建议至少设置为 1

下面是MYSQL 不关于这部分的代码(有时间还真的好好看看C++,要不看代码属于白痴的水平),

1 UNIV_PAGE_SIZE 是 数据页的大小

2 buf_pool_get_curr_size 是 当前的 innodb_buffer_pool 的大小

最后最大的设置得到应该是以页面大小为单位的块的百分比。

学习完总结两点

1 时间和空间 你选择一个,需要快速给空间,需要空间,就要耗费时间

2 内存分配要小心,本身内存就不足的,还开SWAP的,那就...........

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档