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

背景信息

系统中出现慢SQL可能会导致CPU、负载异常和系统资源耗尽等情况。严重的慢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请参见接入应用方式

步骤二:查看监控

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

  1. 登录AHAS控制台,在控制台左上角选择应用接入的地域。
  2. 在控制台左侧导航栏中选择流量防护 > 应用防护
  3. 应用列表页面单击目标应用的资源卡片。
  4. 应用概览页面查看应用的限流指标详情、QPS热力图等情况。
    图 1. 应用概览
    应用概览.png
  5. 在左侧导航栏单击接口详情,在接口详情页面查看每条SQL语句的调用及执行情况。

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

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

流控规则

针对慢SQL防护的流控规则的统计维度有当前接口和关联接口,具体配置,请参见配置流控规则

  • 当前接口:在该模式下,阈值配置为当前SQL资源,超过设置的值后多余的请求将被拒绝。
    图 2. 当前接口
    慢SQL.png
  • 关联接口:阈值配置为关联SQL资源,关联的资源请求超过设置的值之后,该资源的调用将被拦截。
    图 3. 关联接口
    慢SQL2.png

降级规则

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

图 4. 降级规则
降级规则1.png

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