乐趣区

关于sql:深度技术揭秘-大促狂欢背后如何有效评估并规划数据库计算资源

简介:通过“双 11”、“618”这类互联网促销流动的验证,越来越多的互联网公司采纳不定期营销流动来刺激生产,达到晋升营收能力的指标。然而,在每一次业务狂欢的背地,如何迷信地为促销流动筹备相应的计算资源就变成了困扰开发人员的常态问题。此外,据 Gartner 统计,在疫情的影响下越来越多的企业开始减速要害业务模块从本地云往私有云上迁徙,以晋升企业服务的稳定性和容灾能力。如何无效评估并布局计算能力、计算引擎、带宽等要害资源的容量成为了云场景下的一项技术挑战。

1. 背景

通过“双 11”、“618”这类互联网促销流动的验证,越来越多的互联网公司采纳不定期营销流动来刺激生产,达到晋升营收能力的指标。然而,在每一次业务狂欢的背地,如何迷信地为促销流动筹备相应的计算资源就变成了困扰开发人员的常态问题。此外,据 Gartner 统计,在疫情的影响下越来越多的企业开始减速要害业务模块从本地云往私有云上迁徙,以晋升企业服务的稳定性和容灾能力。如何无效评估并布局计算能力、计算引擎、带宽等要害资源的容量成为了云场景下的一项技术挑战。

针对这个场景,阿里云数据库自治服务团队(DAS)推出了智能压测服务,致力于解决大促场景下计算资源评估问题、迁徙上云的离线资源容量布局、跨引擎迁徙等数据库选型评估问题。DAS(Database Autonomy Service)是一种基于机器学习和专家教训实现数据库自感知、自修复、自优化、自运维及自平安的云服务,帮忙用户打消数据库治理的复杂性及人工操作引发的服务故障,无效保障数据库服务的稳固、平安及高效,解决方案架构见图 1。

2. 智能压测的组成

压测,即压力测试,是确立零碎稳定性的一种测试方法,通常在零碎失常运作范畴之外进行,以考查其性能极限和隐患。个别针对网络服务器测试从传统的意义来讲是对网络服务器一直施加“压力”的测试,是通过确定一个零碎的瓶颈或者不能承受的性能点,来取得零碎能提供的最大服务级别的测试。在数据库场景下,压测通常指的是对数据库的性能进行测试,通过对数据库服务器一直进步执行 SQL 的数量和并发度,来测试既定规格下的数据库是否能够继续稳固地对外提供服务,并基于测试后果做出相应的决策,包含调整数据库规格、部署状态、业务 SQL 优化等等。通常状况下,实现一次压测次要波及到三个要害局部:压测数据筹备、流量回放和后果剖析,如图 2 所示。

图 2 智能压测的要害组成

压测数据:在数据库场景下,流量数据为 SQL 语句,但仅有执行时 SQL 语句是不够的。SQL 语句在数据库内的执行过程中,实在数据分布和库表索引都会影响其执行工夫。因而,数据库场景下,压测数据蕴含了数据库的库表构造、库表内数据、索引和 SQL 执行语句。此外,在一些有严格平安要求的非凡场景下,仅表构造容许复用,而具体原始数据不能被用于流量压测。针对这种状况,咱们提出了智能生成数据的算法,产出合乎原始数据散布的模仿数据用于回放。

流量回放技术:传统性能压测过程中,因为未对 SQL 执行语句依照原始流量的并发状况和执行秩序做限度,呈现压测与原始业务流量成果差别较大的景象,导致单次数据库资源评估工作中通常会进行屡次压测,而后对性能后果数据求均匀后再评估资源。这种办法须要消耗大量的测试工夫,并且须要测试人员具备肯定的数据库教训,通常须要 DBA 进行操作。针对这一问题,DAS 对单次压测进行技术改良,通过压测幂等技术确保压测回放后的性能体现与原始业务流量性能相近,且毋庸屡次回放,大幅节俭了资源评估的工夫并升高了对数据库压测教训的要求。

压测后果剖析:无效的后果剖析能够帮忙用户正当的抉择资源规格,并发现业务流量回放过程中存在的隐患。数据库的要害性能参数、要害性能指标的比照、SQL 优化倡议等数据可帮忙用户了解资源差别和潜在优化点,辅助做出后续决策。

3. 智能压测技术底细

3.1. 智能数据生成技术

对于数据库性能压测,业界存在很多开源的工具,例如 Sysbench、mysqlslap、tpcc 等。这类工具均能够通过并发大量数据库连贯联合肯定的查问语句来制作出肯定的 SQL 流量,达到模仿业务高强度应用数据库的成果。但模仿场景下的性能体现通常和业务理论性能体现相差较大,故模仿压测不能满足计算资源评估的要求。利用业务数据库中的实在数据进行压测成为资源评估的根本条件。针对阿里云数据库用户,可通过 SQL 审计性能,不便的获取压测所须要的数据。而对于云下或阿里云 ECS 自建数据库的用户,较难获取历史上的库表数据或流量数据来做压测,甚至在一些有严格平安数据要求的场景下,连原始数据和 SQL 流量数据都是不被容许应用的。

目前,咱们在单表查问场景下采纳智能数据生成技术来产出合乎业务数据分布的数据,可用于压测并评估资源。这个算法的前提是,须要咱们已知一些 SQL 模版,以及这些 SQL 模版对应的执行指标,如 RT,rows\_sent,rows\_affected 等,咱们心愿实例化这些 SQL 模版来生成 SQL,使得这些 SQL 在指标库表上执行时能失去类似的执行指标(这里咱们假如同一模版的 SQL 都会以雷同的执行打算来执行)。如图 3 所示,咱们须要搜寻相应的参数 a 和 b 来实例化这条 SQL 模版,使得在给定数据执行时返回行数为 1。

图 3 SQL 模板

在搜寻 SQL 参数的时候,对于点查问 / 点更新,能够间接利用主键和惟一键来做参数搜寻。而对于返回行数 / 更新行数大于 1 行的状况,咱们应用基于采样的基数预计办法来预计实例化后 SQL 的返回 / 更新行数,进而进行 SQL 模版实例化的参数搜寻。

图 4 是咱们对于钉钉一个读写业务在早高峰期的流量生成压测,能够看到流量生成压测和实在业务在多个指标上都有类似的体现,证实生成的数据能够无效的模仿线上实在数据。

图 4 基于生成数据的压测成果

3.2. 压测幂等技术

在数据筹备实现之后,如何无效且可反复的进行流量回放是智能压测中的另一项核心技术。只管业内已有的开源工具均能够通过并发大量数据库连贯联合肯定的查问语句来制作出肯定的 SQL 流量,达到模仿业务高强度应用数据库的成果。然而,在应用了实在的且有肯定数据歪斜的业务模型之后,会发现一个比较严重的问题:如果屡次测试同一个模型同一份数据在 RDS MySQL 下的性能成果,在数据有歪斜的状况下,两边的性能曲线很可能对不上。例如,第一轮压测在 A 工夫点查到了某一个数据,而第二次压测很可能在 B 工夫点才查到,这样对剖析问题就有了很大烦扰,如图 5 所示,两条曲线尽管压力差不多,然而抖动频率齐全不统一,不利于剖析。

图 5 同一个数据库实例上跑两次雷同的测试模型的成果

针对这种状况,咱们提出了压测幂等的概念,即雷同的测试,无论运行多少次,产生的 SQL 是完全一致的。在幂等状况下,每个工夫点产生的 SQL 文本是完全相同的(假如数据库解决能力完全一致),并且整个压测工作中,所有 SQL 的执行程序是统一的。目前做到了线程级别完全一致,不同线程之间从性能和需要的角度思考没有实现强统一。

在幂等技术的加持下,DAS 智能压测能够针对前文形容的场景能够做到一致性的压测,成果如图 6。

图 6 同一个数据库实例上跑两次雷同的智能压测的成果

压测幂等的技术次要从压测线程生成逻辑、总申请数、写入最终一致性这三方面进行解决,让压测过程中能够确保每个线程外部呈现的随机数的程序都是一样的,并且不同线程之间不一样;通过放弃线程中申请量总数统一,达到确保总申请量固定的成果;再联合自定义主键和约定 update 区间的形式,躲避了自增主键和 update 抵触问题,确保了压测完结后的数据最终一致性。

4. 产品落地

4.1. 产品流程

介绍完智能压测的组成部分和对应的核心技术之后,上面来看 DAS 是如何将智能压测落地成产品。从压测的流程来看,整个智能压测的过程能够分为筹备阶段、SQL 解决阶段、回放阶段和成果评估阶段,如图 7 所示。

图 7 智能压测产品流程

筹备阶段次要是解决压测的机器环境问题,波及从购买 ECS 机器、筹备压测指标实例、配置 ECS 机器上的运行环境等。目前 DAS 的智能压测可依据压测流量的 QPS 和回放时长,自主抉择适合的 ECS 机器并主动配置运行环境,也容许用户采纳利用自有机器进行压测。在筹备压测指标实例环节,当初 DAS 可通过 RDS 备份复原、DTS 同步的形式来自助帮忙用户筹备好指标实例,也容许用户自在指定压测实例。

SQL 解决阶段则次要是对压测应用的全量 SQL 明细数据做压测前的数据筹备,基于 SQL 洞察明细或者智能算法生成的 SQL 数据做预处理,包含 prepared statement 语句去重、日志剔除、事务语句合并等等操作。

在回放阶段次要是利用压测幂等技术将流量进行回放,提供了实时的数据库性能数据和压测机器负载状况,便于用户理解压测进度。在此环节中,DAS 将智能调参算法与压测进行了联合,用户可通过该性能实现参数调优的性能,具体算法实现将在后续文章独自介绍。

成果评估阶段次要是解读压测过程中的指标数据,DAS 对业务调优中罕用的性能参数和要害性能指标做了比照,帮助用户做出资源评估决策。对于压测过程中发现的慢 SQL、锁等问题,DAS 也提供了相应的改良倡议和解决办法,对用户优化业务也提供了信息辅助。

4.2 产品应用

用户能够在 DAS 控制台的左侧菜单“智能压测”进行应用,如图 8。目前 DAS 反对 RDS MySQL 和 PolarDB MySQL 压测,其余关系型数据库引擎的反对正在开发中。

图 8 智能压测界面

在压测完结之后,用户能够通过工作详情查看到指标实例与源实例的性能数据比照以及要害参数的比照,如图 9 所示。

图 9 压测后的成果比照

4.3. 产品计费

目前 DAS 智能压测性能未独自免费,压测流程中新创建的 ECS、RDS 均依照对应产品官网中以按量计费的规范进行计费,无额定服务费用。如前文所述,压测依赖源端全量 SQL 明细数据或相应库表根底构造数据,故该服务仅须要压测源端实例开启 DAS 专业版性能即可。

4.4. 客户案例

DAS 智能压测服务自 2020 年上线以来,次要客户为云上头部客户,已累计为近百个客户提供服务,次要包含上云资源评估、业务大促评估、引擎切换评估、数据库操作验证等场景。

5. 将来布局

接下来,智能压测将减少反对的数据库引擎,笼罩云上的所有关系型数据库引擎;同时,智能压测将会贴近客户的实在业务问题,与用户上云、资源评估、引擎举荐等场景亲密联合,并提供相应的压测评估倡议和报告,与企业客户一起构建大规模场景下的数据库容量布局能力。

7 月 7 日 14 点 数据库自治服务 DAS 年度重磅公布

DAS 自治胜似闲庭信步

数据库主动驾驶进入规模化时代
扫描 下图二维码 或点击“这里”预约观看直播

版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

退出移动版