针对数据库连接池到DRDS连接探活的优化

简介: 针对数据库连接池到DRDS连接探活的优化

image.png

1. 问题背景

近期在给某专有云客户进⾏云产品应⽤性能优化分析时,发现了⼀个有趣的关于DRDS使⽤层⾯的问题,这⾥给⼤家分享⼀下。
使⽤过DRDS产品的同学都知道在DRDS中,未分库分表的数据表会存储在“0号库”上,对于这些表操作的SQL会被分发到“0号库”上执⾏。所以⼀般情况下,0号库所在实例的压⼒会⽐其它实例的压⼒稍⼤⼀些。近期分析该客户的数据库性能时,发现客户使⽤的DRDS下0号库所在的RDS实例的压⼒明显⽐其它RDS实例⾼出许多。

1.jpg
图1:SQL语句平均每秒执行次数及事务数

2. 原因分析

通过查看0号库所在的RDS实例的执⾏SQL发现,有⼤量的 SELECT 'x' 的查询语句。检查应⽤侧代码后发现,这个查询语句是应⽤侧连接池配置的连接探活SQL,所有的连接池实现⼏乎都有这个功能,可以通过探活SQL检测连接当前是否可⽤。
那么问题来了:

  1. 为什么只有0号库所在RDS上会有⼤量此类的语句?
    DRDS中不带表名的(⽐如 SELECT 'x')SQL和show命令都会被下发到0号库执⾏。

  2. 对于客户端来说这种连接检测是否有⽤?

答案⼀定是有⽤的,因为如果因⽹络闪断或其它原因导致的连接状态不可⽤,即使获取到了连接对象,也不能进⾏数据访问操作。所以这个检测是有必要的,但对于使⽤DRDS作为数据源的场景来说,⽬前配置的检测⽅式是存在问题的。
对于传统的数据库使⽤⽅式,客户端是直接连接到底层数据库的,如下图。探活SQL是直接发到连接的数据库执⾏,这种场景下使⽤ SELECT 'x' 检测客户端到数据库的连接是没有问题的。

2.jpg
图2:客户端连接到数据库

⽽对于使⽤DRDS作为数据源的场景来说,探活语句在发送到DRDS服务后,会被转发到0号库执⾏,这就意味着这个探活SQL实际上检测的是客户端-->DRDS-->0号库的链路是否正常。

3.jpg
图3:客户端通过DRDS连接到数据库

这⼀点可以从DRDS上看 SELECT 'x' 的执⾏计划得到证实,如下:

4.jpg
图4:执⾏结果1

实际上,这样的数据源连接检测是没有意义的。因为:

  • 第⼀,数据源后端实际上只检测了DRDS到0号库的连接状态,DRDS到其它分库的连接状态并未检测。但真正执⾏SQL时,DRDS是有可能将解析后的SQL下发到其它分库上执⾏的。

  • 第⼆,客户端探活SQL的作⽤主要是为了保证客户端连接池与数据源之间的连接是可⽤的。对于数据源背后的情况应该由数据源本身维护,即由DRDS本身到RDS的连接池保障连接可⽤性,⽽不应该通过客户端的探活功能来保证。

3. 解决方法

明⽩以上内容后,我们解决问题的⽅案就⽐较清楚了,实际上我们只需要让客户端连接池检测客户端到DRDS的连接状态即可。那有没有这样的检测⽅法呢?
答案当然是有的,经过与DRDS研发同学确认,将探活SQL修改为 SELECT 'x' FROM dual 即可。
修改后,再次在DRDS查看执⾏计划,如下:

5.jpg
图5:执⾏结果2

在应⽤侧修改连接池的探活SQL配置后,从0号库所在实例上看,已经看不到探活SQL的执⾏记录,⽽且从修改前和修改后0号库所在实例的压⼒来看,效果也⽐较明显,0号库的压⼒相⽐之前下降了⼤概80%左右。

6.jpg
图6:SQL语句平均每秒执行次数及事务数2

4. 连接池参数配置

⾄此,0号库压⼒过⾼的问题解决了,下⾯我们聊聊为什么会有⼤量的探活语句出现。
探活机制实际上是数据源连接池通⽤的⼀种检测机制,可以检测连接池内的连接对象是否真的可⽤。拿Druid连接池举例,探活SQL是通过数据源的 validationQuery 属性配置的。与之相关的配置属性还有:testOnBorrow、testWhileIdle、testOnReturn、timeBetweenEvictionRunsMillis、 minEvictableIdleTimeMillis。官⽅解释如下:

  • testOnBorrow:申请连接时执⾏ validationQuery 配置的探活语句检测连接是否有效。

  • testWhileIdle:申请连接的时候检测,如果空闲时间⼤于timeBetweenEvictionRunsMillis ,执⾏ validationQuery 检测连接是否有效。

  • testOnReturn:归还连接时执⾏ validationQuery 检测连接是否有效。

  • timeBetweenEvictionRunsMillis:有两个含义

    1)Destroy线程检测连接的间隔时间,如果连接空闲时间⼤于等于 minEvictableIdleTimeMillis 则关闭物理连接。
    2)testWhileIdle 的判断依据,详细看 testWhileIdle 属性的说明。

  • minEvictableIdleTimeMillis:连接保持空闲⽽不被驱逐的最⼩时间。

⽂章前⾯描述的出现⼤量探活SQL的情况是因为应⽤将连接池的testOnBorrow设置成了true,所以在每次应⽤获取连接时,都会执⾏ validationQuery 配置的探活语句检测连接是否有效。虽然通过前⾯的优化步骤,已经降低了0号库的压⼒,使探活语句不下发到0号库执⾏。但探活语句仍会在DRDS实例上执⾏,DRDS实例的压⼒并未减轻。通过上⾯对Druid数据源属性配置的说明可以了解到,如果将 testOnBorrow 或 testOnReturn 打开,会对系统性能有⼀定的影响,因为每次都会在获取连接时多执⾏⼀次查询来检测连接是否可⽤。因此推荐使⽤如下的配置:

  • testWhileIdle=true【如果获得的连接为“空闲连接”,则会进⾏探活检测,如果检测失败,会将此连接从连接池移除,尝试重新从连接池获取连接】

  • timeBetweenEvictionRunsMillis=60000【Destroy线程每隔1分钟对连接池内部的空闲时间>= minEvictableIdleTimeMillis的连接进⾏探活检测,如果检测失败,会将连接从连接池移除】

  • minEvictableIdleTimeMillis=60000【如果连接闲置1分钟,则认为此连接为“空闲连接“】

这样设置完成后,只有在获取到“空闲连接”时,才会进⾏探活检测,⼤⼤降低了业务⾼峰时段的探活频率。同时,也可通过适当缩短minEvictableIdleTimeMillis 的值,兼顾由于⽹络闪断或其它原因导致的连接不可⽤的情况,减少业务出错的概率,在系统性能和可⽤性之间找到⼀个平衡点。

作者:刘维

原文链接

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 作为企业IT信息化中最热的话题,低代码被广泛关注和讨论。国内低代码赛道的厂商众多,传统表格控件厂商、互联网巨头、创业公司,各具优势,在市场攻城拔寨。而国外&#x…

人生苦短,开发用云-如何优雅完成程序员的侠客梦

简介: Coding的魅力如此之强,引无数程序员竞折腰,在今年由CSDN举办的1024程序员节上,中国初代程序员大宗师求伯君说,当年看到有人在用WPS,可开心了,因为有很多人用。然后,也会去找看是谁破解的&…

DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践

简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开。大会以“架构革新 高效可控”为主题,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨。在数据库智能运维专场上…

SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台

简介: SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台 1.目标定位 1.1背景 告警管控平台种类繁多告警出现后未及时发现处理最终导致故障产生专有云监控能力拉起依赖版本升级,操作复杂,迭代慢异常问题和故障的感知力不如…

安全攻击层出不穷,绿盟科技“智慧安全 3.0”安全防护再升级

随着网络空间和物理空间的边界不断融合,威胁攻击也层出不穷:5月9日,美国最大的燃油管道运营商、东部地区油气输送主要动脉 Colonial Pipeline 公司遭受黑客攻击和勒索,被迫暂停运营,直接导致了美国17个州和华盛顿特区进…

技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了

简介: 你真的知道如何“上传”一张照片吗? 选择本地相册图片或者拍照,然后预览并且上传是移动应用中一个典型的使用场景,比如常见的身份证信息上传等。 不少客户都反馈有类似的场景,并且在使用上都或多或少的遇到一些…

Serverless 在 SaaS 领域的最佳实践

简介: 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势。我们看到互联网浪潮正在席卷传统行业,云计算、大数据、人…

5G进入爬坡期,这个关键因素,决定了它的成败……

作者: 小枣君来源: 鲜枣课堂前言2021年上半年,国内5G推进取得了不错的进展。根据工信部最新的数据统计,截止6月底,国内5G基站数量达到96.1万,即将突破百万大关。而国内5G终端连接数,也相比年初猛…

如何降低微服务测试成本?我的经验之谈

简介: 本文为大家介绍微服务治理测试:基于服务契约信息,降低云上微服务测试成本。如果您的团队具备较强的微服务治理测试能力,那么希望我们在微服务治理测试方面的实践和背后的思考,可以为您提供一些参考。 前言 随着…

C语言偏科,C

即使目前的汽车工业发展飞速,类似智联系统、自动驾驶等“黑科技”层出不穷。但不少消费者却仍将关注点放在车辆的基础性能上,譬如它们的安全系数。的确,对于一台行驶在路上的代步工具而言,再多花哨的功能也只能是锦上添花&#xf…

分布式全链路灰度发布的探索与实践

简介: 在分布式系统中,由于分布式全链路灰度发布因其链路复杂、技术门槛高、落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在。工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布,致力于解决分布式…

漫画:什么是 HTTPS 协议?

作者:小灰来源:程序员小灰什么是HTTP协议?HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行…

DTCC 2020 | 阿里云张鑫:阿里云云原生异地多活解决方案

简介: 异地多活,顾名思义就是分布在异地多个站点同时对外提供服务,与传统灾备最主要的区别是“多活”里所有站点都是同时在对外提供服务的。在业务不断复杂化和容灾要求不断严格化的今天,如何实现云原生的异地多活解决方案&#x…

政企边缘安全,如何助您提升企业的“免疫力“?

简介: 在数字化进程中,政企会面临诸多在线化的挑战,一方面要求业务能够在线开放,同时也要求服务是稳定流畅可靠的,此外还要保证安全合规,这对业务开发及运营者提出了极高要求。1月6日,阿里云CDN…

在部队敲代码是一种什么样的体验?

作者 | 千鸟(网名) 小路助手开发者责编 | 晋兆雨出品 | CSDN(ID:CSDNnews)CSDN编者按:对于大多数人来说,大学毕业后选择一家满意的公司,一路升职加薪才是正解,但他却偏…

消息轨迹全景图详解-独门秘籍

简介: 消息轨迹全景图详解-独门秘籍 消息轨迹全景图详解-独门秘籍 消息轨迹全景图详解-独门秘籍 阿里云 IoT 企业物联网平台上线了消息轨迹全景图功能,帮助 IoT 开发者追踪消息通信的完整轨迹,快速分析和定位问题,及时恢复业务。…

元数据驱动的 SaaS 架构与背后的技术思考

简介: 在抽象能力以及沉淀了产品的基础上,把所承载和沉淀的业务能力快速输出,贡献给整个行业。 道冲而用之或不盈,渊兮似万物之宗。 —老子 引言 作为业务系统技术开发同学,面向当下: 首先应该是快速搭建业…

对 SolarWinds 事件更深的思考:如何防御供应链攻击

简介: 消灭企业安全体系中“隐秘的角落” ———— APT攻击愈演愈烈,与SolarWinds相关的安全反思已持续半月,阿里云安全带来了面向供应链攻击特征属性的全面攻防观察,以飨从业者。 ———— 后期精彩的APT内网对抗往往依赖于「先…

DTCC 2020 | 阿里云李飞飞:云原生分布式数据库与数据仓库系统点亮数据上云之路

简介: 数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁、阿里云数据库产品事业部总裁、ACM杰出科学家李飞飞就《云原生分布式数据库与数据仓库系统点亮数据上云之路》…

Serverless 架构到底要不要服务器?

简介: Serverless 架构是不是就不要服务器了?回答这个问题,我们需要了解下 Serverless 是什么。 Serverless 是什么? Serverless 架构是不是就不要服务器了?回答这个问题,我们需要了解下 Serverless 是什…