云数据库Mysql的查询加速手艺Fast(Query Cache)

作者:q1006
围观群众:36
更新于

云数据库Mysql的查询加速手艺Fast(Query Cache)

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

本文重点先容阿里云数据库MySQL的内核查询加速手艺Fast Query Cache功效。

云数据库Mysql的查询加速手艺Fast(Query Cache)

1. OLTP

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

云数据库Mysql的查询加速手艺Fast(Query Cache)

大部分的营业数据库系统都是在线事务性(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)
  • 优化并发控制:
    作废全局锁同步机制,并接纳无锁机制,重新设计并发场景下的同步问题,能够充分行使多核的处置能力,保证高并发场景下的性能。
  • 优化缓存机制:
    动态检测缓存行使率,实时调整缓存计谋,解决掷中率偏低或读写夹杂等场景下的性能退化问题。
  • 优化内存治理:作废内存预分配机制,接纳加倍天真的动态内存分配机制,无效的内存实时接纳,保证内存的真实行使率。

阿里云数据库MySQL Fast Query Cache 开启方式和开源Query Cache完全一致,通过query_cache_type参数设置为“ON”打开。在现实测试中,接纳4核8GB内存的机械,行使sysbench压测,总共数据量有250MB(25张表,每张表40000条纪录),效果异常好。

1)

所有掷中只读场景

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

测试效果显示,在较高并发的场景下,MySQL原生Query Cache并发处置性能泛起较大幅度的降低,Fast Query Cache在各个并发场景下无性能降低,最高时能够提高一倍的QPS。

云数据库Mysql的查询加速手艺Fast(Query Cache)

2)

高掷中率只读场景

Sysbencholtp_read_only,用例中包罗返回多条纪录的局限查询,将Query Cache设为512MB,内存才相对对照足够,掷中率可以到达80%以上。

测试效果显示,随着并发数的增添,MySQL原生Query Cache的性能泛起显著的降低,Fast Query Cache的性能则会不停提升,最高时能够提高一倍多的QPS。

3)

低掷中率只读场景

Sysbencholtp_read_only,用例中包罗返回多条纪录的局限查询,将Query Cache设为16MB,内存显著严重不足,缓存掷中率只有10%左右,内存不足时会涉及缓存项的大量镌汰,影响性能。

测试效果显示,MySQL原生Query Cache的性能降低显著,最多泛起了靠近50%的性能损失,Fast Query Cache优化了低掷中率场景,将性能损失控制在2%以内。

4)

读写夹杂场景

Sysbencholtp_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

云数据库Mysql的查询加速手艺Fast(Query Cache)

云数据库RDS Mysql

云数据库Mysql的查询加速手艺Fast(Query Cache)

非特殊说明,本文版权归 鑫源观察网 所有,转载请注明出处.

本文分类: 热门

本文标题: 云数据库Mysql的查询加速手艺Fast(Query Cache)

本文网址: http://xinyuanvet.com/remen/1150.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类
搜索
最新留言
    标签列表