糟糕,数据库异常不可用怎么办?

时间:2022-12-07 11:15:21
摘要:糟糕,数据库异常不可用怎么办?挺着急的,在线等。

本文分享自华为云社区《糟糕,数据库异常不可用怎么办?》,作者:GaussDB 数据库。

随着数字化转型的加速,数据量爆发式增长,用户对数据库运维能力要求更高,实现对数据库的高效智能管理,尤其是业务异常时,数据库运维平台能自动定位故障并修复,或者提供有价值信息,帮助客户快速定位解决问题。

华为云数据库团队打造的RDS for MySQL智能DBA助手,为数据库管理人员提供了一站式数据库运维方案,能够帮助用户快速处理异常,保持业务稳定运行。近期,我们新上线了自治限流功能,通过限流非核心业务SQL来保障核心业务稳定运行,下面将为您带来该项业界领先的功能的详细解读。

在遭遇异常流量高峰时,如何处理?

在实际运维场景中,客户因为业务变更或者业务高峰期会带来流量高峰,导致系统指标异常,实例CPU飙升近100%,会话SQL处理变慢,活跃连接数增加,数据库响应异常甚至不可用。可能的原因有以下两个方面:

  1. SQL问题:SQL执行效率慢,如对无主键、无索引的表进行查询操作时,CPU和 IO被打满。
  2. 流量问题:突发的流量急剧上升,数据库容量达到瓶颈,影响正常业务。

解决方案:

针对上述问题,一般会采用两种方式来处理:

方式一:先分析异常SQL,定位后手动Kill会话

方式二:简单粗暴,重启数据库。

但面对复杂问题,传统解决方案往往无法从根本上解决,定位解决问题花费时间长,导致业务受损。针对这一挑战,业界采用限流的方式来处理,不区分业务,即不会区分限流SQL所在的库或者客户端用户,这可能导致无差别的kill会话,核心业务受损

我们今天介绍的自治限流功能是如何应对这一潜在风险呢?

自治限流,指的是通过预先设置限流策略,自动限定执行SQL的并发度,通过小部分业务受损,保障核心业务的正常运行。具体来说,可以通过以下三个策略来进行流控:

分库、分用户设置限流范围

自治限流功能支持分库、分用户两种方式设置,客户根据业务情况,识别核心业务库和客户端用户,按需选择相应的限流方式。

  • 按库设置:根据业务重要程度,选择对特定的一个或者多个库进行限流,默认不区分库名。
  • 按用户名设置:根据不同用户业务差异,选择对特定的一个或者多个用户进行限流,默认不区分用户。

设置限流时间:

通过设置限流时间窗(即自治限流功能只在该时间段生效)和每次最大限流时长(即自治限流生效后持续时长),方便定位SQL异常,请注意:同一天只在该时间窗内生效一次。

设置限流策略

条件1:根据业务情况,设置CPU利用率大于多少 【且/或】 活跃会话数大于多少,且上述条件持续时间大于多少分钟,会触发限流。

条件2:设置允许的最大活跃并发数,当前活跃会话数大于最大活跃会话数时,会将会话数清理到小于最大活跃会话数。

设置界面如下:

糟糕,数据库异常不可用怎么办?