云数据库Mysql的查询加速技术Fast Query Cache

访客4年前黑客文章1175

对于开展互联网业务的现代企业来说,数据库是企业的核心资产,其系统的数据量和访问量都很高,并且存在流量爆发的场景。数据库的稳定性往往关系到企业的互联网业务是否能正常开展,甚至关系到企业的生死

众所周知,阿里云数据库RDS MySQL 具有高效、稳定、安全可靠、可弹性伸缩的特点,但这听起来似乎有点模糊。其实云数据库RDS MySQL在包括内核、管理系统上都进行了深度的优化。本系列文章将会逐一对RDS MySQL的特性进行拆解,从效能、稳定性、安全三个角度分享相比开源MySQL的核心优势。

本文重点介绍阿里云数据库MySQL的内核查询加速技术Fast Query Cache功能。

1. OLTP数据库的请求特点和优化方案

大部分的业务数据库系统都是在线事务性(OLTP)的,究其特点,一是单次操作数据库的关系数据量很少,如几条记录或者几十条记录;二是对数据库的读请求量要远高于写请求量,即读写比严重不平衡,如电商业务订单系统,一条订单随业务推展而状态改变约在10次,而对应的查询次数要超过200次。所以OLTP类数据库的资源主要消耗于对小数据量的查询请求处理。

为了解决这种读写比倾斜严重的问题,一般会采取如下几种方案:

方案一:扩容数据库硬件,尤其是增加内存,我们称之为 数据库的Scale up的方案。对应MySQL增加Buffer Pool大小,可快速有效提升性能。

方案二:可称之为数据库的Scale out方案,增加数据库读副本,MySQL相对比较容易做到,通过建立多个只读备库可极大的扩充数据库的读请求处理能力。但本方案带来一个问题,就是应用要实现对读写请求的路由识别,只将读请求(非事务内)路由到只读库,否则大量写请求路由到只读库后业务将会出现大量失败,“不小心”还会导致数据写入错误。另外,应用还需要关注只读库与源库的数据延迟时间,时间太长一般业务都难以接受,经验来看秒级延迟是基本要求。

方案三:对业务系统进行架构改造,做大量的解耦工作,针对核心表做成中心服务化形式对外提供服务,如阿里 *** 天猫的几大C系统模式。该方案的核心就是引入缓存系统,一般开源如Redis系统,利用缓存承接大量的读请求,但整体系统需要考虑缓存失效的问题,同时还要分别维护缓存和数据库两套系统,技术研发成本较高。

2.开源MySQL的Query Cache方案和问题

从上述三种方案比较来看,方案三增加查询结果集缓存是对数据库非常理想的解决方案,这也是大型互联网公司普遍采用的方案,但此方案毕竟要涉及不少的应用系统改造,工程量较大,故MySQL引入了一种查询缓存技术(Query Cache)。

MySQL Query Cache的执行流程图如下,其保存查询返回的完整结果,当新查询命中该缓存会立刻返回结果,跳过了SQL解析、优化和执行等复杂阶段。同时Query Cache会跟踪查询中涉及的每个表,如果这些表发生变化,那么和这个表相关的所有缓存都将失效。

MySQL Query Cache原理上是通过使用额外内存来节约CPU资源来达到查询加速的目标,是一项非常实用的技术,与MySQL组合Redis方案相比,具有以下几个优势:

  • 应用透明,使用Query Cache可以不更改客户端应用程序,只需要在Server端进行简单配置,而使用Redis则需要更改客户端应用程序。
  • 数据一致,使用Query Cache无数据同步问题,并且可以保证事务级一致性,而使用Redis则涉及数据同步,无法实现事务级一致性。
  • 成熟稳定,MySQL有成熟的事务引擎及复制技术,可以保证数据不丢失,而Redis的持久化及复制技术不够成熟,使用Redis需要考虑到数据丢失的问题。

但开源MySQL 实现的Query Cache不够优雅,实际应用中存在不少问题:

  • 并发处理不够好,在多核情况下,可能并发越高性能退化越严重。
  • 当缓存命中率较低时,性能无提升甚至会出现严重退化。
  • 内存管理问题,内存利用率低并且回收不及时,造成内存浪费。
  • 当向某个表写入数据的时候,必须将这个表所有的缓存设置为失效,如果缓存空间很大,则消耗也会很大,可能使系统僵死一段时间,因为这个操作是靠全局锁操作来保护的。

3.阿里云数据库MySQL的Fast Query Cache

阿里云数据库MySQL针对开源MySQL问题,通过对Query Cache重新设计,实现了一种更好的查询缓存机制,称为Fast Query Cache,解决了以上几个主要问题:

  • 优化并发控制:
    取消全局锁同步机制,并采用无锁机制,重新设计并发场景下的同步问题,能够充分利用多核的处理能力,保证高并发场景下的性能。
  • 优化缓存机制:
    动态检测缓存利用率,实时调整缓存策略,解决命中率偏低或读写混合等场景下的性能退化问题。
  • 优化内存管理:取消内存预分配机制,采用更加灵活的动态内存分配机制,无效的内存及时回收,保证内存的真实利用率。

阿里云数据库MySQL Fast Query Cache 开启 *** 和开源Query Cache完全一致,通过query_cache_type参数设置为“ON”打开。在实际测试中,采用4核8GB内存的机器,利用sy *** ench压测,总共数据量有250MB(25张表,每张表40000条记录),效果非常好。

1)全部命中只读场景

Sy *** encholtp_point_select,用例中仅包括主键上的点查(point select),将Query Cache设为512MB,内存大于测试数据量,缓存命中率达到99%以上。

测试结果显示,在较高并发的场景下,MySQL原生Query Cache并发处理性能出现较大幅度的降低,Fast Query Cache在各个并发场景下无性能降低,更高时能够提高一倍的QPS。

2)高命中率只读场景

Sy *** encholtp_read_only,用例中包含返回多条记录的范围查询,将Query Cache设为512MB,内存才相对比较充足,命中率可以达到80%以上。

测试结果显示,随着并发数的增加,MySQL原生Query Cache的性能出现明显的降低,Fast Query Cache的性能则会不断提升,更高时能够提高一倍多的QPS。

3)低命中率只读场景

Sy *** encholtp_read_only,用例中包含返回多条记录的范围查询,将Query Cache设为16MB,内存明显严重不足,缓存命中率只有10%左右,内存不足时会涉及缓存项的大量淘汰,影响性能。

测试结果显示,MySQL原生Query Cache的性能降低明显,最多出现了接近50%的性能损失,Fast Query Cache优化了低命中率场景,将性能损失控制在2%以内。

4)读写混合场景

Sy *** encholtp_read_write,每个事务中都有对表的更新操作,可以认为缓存基本处于失效状态,频繁的更新操作涉及缓存的主动淘汰,理论上会比较影响性能。

测试结果显示,Fast Query Cache在读写混合场景下不会出现过多的性能降低,整体性能影响控制在2%以内。

4.总结

阿里云数据库MySQL Fast Query Cache大大增强了数据库查询性能,通过增加一点点的内存换取巨大的性能提升,在主要业务场景(读场景)中性能提升达到1倍,将会取得巨大的收益,在使用方式上和开源MySQL Query Cache保持完全一致,具备领先业界的产品竞争力。

目前Fast Query Cache已经在RDS 和云数据库专属集群中具备。云数据库专属集群RDS,用户100%独占底层物理机,且支持用户通过弹性资源功能灵活调配数据库实例资源占用,这样开启Fast Query Cache将会再获得一倍性能收益,结合CPU超配技术最少获得的一倍收益,则相比于在物理机自建,专属集群整体成本可达到后者约30%,是目前云上企业更好的数据库节省成本方案。

云数据库专属集群MyBase

云数据库RDS Mysql

相关文章

0基础黑客教程(黑客零基础入门教程)-零号黑客

0基础黑客教程(黑客零基础入门教程)-零号黑客

0基础黑客教程(黑客零基础入门教程)(tiechemo.com)一直致力于黑客(HACK)技术、黑客QQ群、信息安全、web安全、渗透运维、黑客工具、找黑客、黑客联系方式、24小时在线网络黑客、黑客业...

个人站点SEO,切勿盲目专注如下5个内容

个人站点SEO,切勿盲目专注如下5个内容

在搜索引擎优化的进程中,老是一个渐进的进程,尤其是对付小我私家网站,许多站长,很是乐意“耳食之闻”,但在实战中,一些看似很是公道的运营计策,并不合用于每一个网站,这是“听”和“做”的最大区别,小我私家...

房产知识:问下大家自己办房产证麻烦吗

相信现在有很多的朋友们对于问下大家自己办房产证麻烦吗都想要了解吧,那么今天小编就来给大家针对问下大家自己办房产证麻烦吗进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 一、买房人能自己办...

小区里面卖什么赚钱(推荐几款稳赚不赔的经营

小区里面卖什么赚钱(推荐几款稳赚不赔的经营

小区人群聚集,是生意生生不息的地方,也可以说是被无数创业者看好用来开店的地盘。但是小区开店也不能随便,小区经营店生意往往与小区类型挂钩,所以开店还得判断一个小区的档次类型。高端小区人均购买能力强,但是...

去哪找黑客团队下单-我想加个黑客电话

去哪找黑客团队下单-我想加个黑客电话

去哪找黑客团队下单相关问题 免费盗qq的黑客相关问题 中国黑客怎么联系 黑客收徒网站(试玩收徒网站) 遇到微信黑...

金刚菩提子怎么清理(金刚菩提子手串清洁方法

金刚菩提子怎么清理(金刚菩提子手串清洁方法

盘,是对金刚菩提子把玩的一个统称,这里面包括了刷、盘相结合的一个过程,一条新的金刚上手,特别是一些新手朋友真的不知道怎么样玩才不影响以后的红和玉化。 金刚菩提子 金刚菩提子纹路沟壑纵横,盘玩的...