慢 SQL 是比较致命的影响系统稳定性的因素之一。针对此类场景,AHAS 应用流控降级提供了 SQL 级别的识别与防护,您可以根据监控详情为慢 SQL 配置流控降级规则保障系统的稳定性。

背景信息

系统中出现慢 SQL 可能会导致 CPU、LOAD 异常和系统资源耗尽等情况。严重的慢 SQL 发生后可能会拖垮整个数据库,对线上业务产生阻断性的风险。线上生产环境出现慢 SQL 可能原因如下:

  • 网络速度慢、内存不足、I/O 吞吐量小、磁盘空间满等硬件原因。
  • 没有索引或者索引失效。
  • 数据过多。
  • 在项目初期没有对 SQL 的性能做好考量。

使用 AHAS 应用流控降级识别慢 SQL并为其配置流控降级规则的具体操作流程如下:

接入 AHAS 应用流控降级 > 查看监控 > 配置慢 SQL 防护规则

步骤一:接入 AHAS 应用流控降级

AHAS 流控降级通过自动检测常见的 DAO 类、JDBC 驱动类等自动识别应用中的 SQL 语句,用户可以通过 Java Agent 或者 JAVA SDK 两种接入方式来实现 SQL 的监控和拦截。

说明 其中 Java Agent 目前支持 MySQL JDBC 和 Oracle JDBC 驱动,SDK 目前支持 MyBatis 框架下的 SQL 识别。第三方组件和框架的版本支持情况详见支持列表

将应用接入 AHAS 请参见接入概述

步骤二:查看监控

为应用接入流控降级服务后,您可以监控应用和资源 API 维度的实时数据(细化至秒级),从而评估系统的整体表现,并为流控降级规则的配置提供重要依据。具体监控指标包括 QPS、响应时间、流控降级接口数等。

  1. 登录 AHAS 控制台,在控制台左上角选择应用接入的地域
  2. 在控制台左侧导航栏中选择流控降级 > 应用流控降级
  3. 应用列表页面单击目标应用的资源卡片。
  4. 应用概览页面查看应用的限流指标详情、QPS 热力图、集群的平均 CPU 和负载和不同 SQL 语句执行的 Top 情况(包括请求 QPS Top、拒绝 QPS Top、RT Top,以及对应的单机 TOP 数据) 。
    图 1. 应用概览

    慢 SQL_应用概览
  5. 在左侧导航栏单击监控详情,在监控详情页面查看每条 SQL 语句的调用及执行情况。
    图 2. 监控详情

    慢 SQL-监控详情

步骤三:配置慢 SQL 防护规则

根据 AHAS 自动识别的 SQL 语句,可以对出现慢 SQL 的应用配置线程数维度的流控或降级规则,当出现慢 SQL 调用时限制同一时刻执行的 SQL 数量,防止过多的慢 SQL 语句执行把资源耗尽。

流控规则

针对慢 SQL 防护的流控规则有直接模式和关联模式,具体配置步骤请参见流控规则

  • 直接模式:在该模式下,阈值配置为当前 SQL 资源,超过设置的值后多余的请求将被拒绝。
    图 3. 直接模式

    慢 SQL-直接模式
  • 关联模式:阈值配置为关联SQL资源,关联的资源请求超过设置的之后,该资源的调用将被拦截。
    图 4. 关联模式

    关联模式

降级规则

慢 SQL 防护的还可以使用降级规则,根据 SQL 执行的 RT 设置对应的阈值以及时间窗口,超过指定的 RT 值后在时间窗口内 SQL 执行将被降级,抛出包装好的异常。具体操作步骤请参见降级规则

图 5. 降级规则

降级规则

资源被流控降级后会报 BlockException 类异常(限流会抛流控异常 FlowException,降级会抛出降级异常 DegradeException),您可以根据异常信息进行后续业务处理。