华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题

随着用户对数据访问速度的日益重视,MySQL数据库在最初的设计中,采用了线性预读的方式,提前将即将使用的数据预读到Buffer pool中,来提升数据的访问速度,但在实际使用过程中,线性预读失效的问题愈来愈突出。

对于存在时间比较长,变更又比较频繁,除非我们对于这张表进行重建,否则该表会存在大量的数据碎片,导致数据存放不连续,这样会使MySQL原有的线性预读功能失效,导致某些查询语句变很慢,如:全表扫描,范围扫描等。

频繁变更操作会破坏数据的连续性

一般情况下,当我们在数据存放连续时执行全表扫描,数据库就会异步地把这些数据从磁盘加载到Buffer pool,从而提高数据库的处理速度。比如当我们访问了Row A1,Row A2,Row A3时,数据库会认为你下次有极大的概率去访问Row A4,Row A5,Row A6,从而自动异步地把这些数据加载到Buffer pool中。

但如果在这张表上频繁地执行变更操作,则会破坏数据的连续性。在我们访问Row A1,Row A2,Row A3时,数据库发现这三行数据并不连续,所以数据库不会提前将Row A5,Row A6从磁盘异步地加载到Buffer pool,只能一个一个的去请求、加载,从而影响访问效率。数据连续时,访问500w Row数据需要12s,但是数据不连续时,访问500w Row数据需要34s。

华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题

对于在线应用来说,重建表会产生较大的运维风险,数据面临丢失的可能。那到底有没有什么特性可以在不重建表的情况下,弥补线性预读失效的问题呢?

线性预读的失效催生出“逻辑预读”特性

华为云RDS数据库服务,新开发了“逻辑预读”特性,在不重建表的情况下,弥补线性预读失效的问题,从而提高分析型业务的执行效率。

华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题

“逻辑预读”特性,在预读数据的时候,首先通过对要预读的数据的页号进行排序,去除数据不连续的影响,然后合并相邻数据页的IO请求,减少磁盘IO的总请求次数,从而提高数据预读的命中率和效率。

华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题

华为云数据库团队做了一个测试:采用8核16GB 100GBSSD规格的Linux机器,测试2.4GB大小500w Rows存在碎片的数据,执行select *from tablename(全表扫描查询),结果如下:

华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题

由此可见,相比开源版本,华为云MySQL逻辑预读特性大大缩短了访问时长,极大提升了执行效率,为分析型业务的进一步发展注入了新动力。

每一个改变都是为了更好的服务客户,华为云MySQL逻辑预读特性的推出,不仅很好地弥补了线性预读的失效问题,提升了分析型业务的执行效率,更是为客户的业务场景保驾护航,助力其创新发展,实现更多价值。

更多详情了解,敬请前往华为云官网:产品——基础服务——数据库。

极客网企业会员

免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。

2019-11-29
华为云MySQL新增“逻辑预读”特性,轻松解决线性预读失效问题
随着用户对数据访问速度的日益重视,MySQL数据库在最初的设计中,采用了线性预读的方式,提前将即将使用的数据预读到Buffer pool中,来提升数据的访问速度,但在实际使用过程中,线性预读失效的问题愈来愈突出。

长按扫码 阅读全文