慢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的监控和拦截。
将应用接入AHAS请参见接入应用方式。
步骤二:查看监控
将应用接入AHAS应用防护服务后,您可以监控应用和资源API维度的实时数据(细化至秒级),从而评估系统的整体表现,并为流控降级规则的配置提供重要依据。具体监控指标包括QPS、响应时间、流控降级接口数等。
- 登录AHAS控制台,在控制台左上角选择应用接入的地域。
- 在控制台左侧导航栏中选择 。
- 在应用列表页面单击目标应用的资源卡片。
- 在应用概览页面查看应用的限流指标详情、QPS热力图等情况。
- 在左侧导航栏单击接口详情,在接口详情页面查看每条SQL语句的调用及执行情况。
步骤三:配置慢SQL防护规则
根据AHAS自动识别的SQL语句,可以对出现慢SQL的应用配置线程数维度的流控或降级规则,当出现慢SQL调用时限制同一时刻执行的SQL数量,防止过多的慢SQL语句执行把资源耗尽。
流控规则
针对慢SQL防护的流控规则的统计维度有当前接口和关联接口,具体配置,请参见配置流控规则。
- 当前接口:在该模式下,阈值配置为当前SQL资源,超过设置的值后多余的请求将被拒绝。
- 关联接口:阈值配置为关联SQL资源,关联的资源请求超过设置的值之后,该资源的调用将被拦截。
降级规则
慢SQL防护的还可以使用降级规则,根据SQL执行的RT设置对应的阈值以及时间窗口,超过指定的RT值后在时间窗口内SQL执行将被降级,抛出包装好的异常。具体操作,请参见配置熔断规则。
资源被流控降级后会报BlockException
类异常(限流会抛流控异常FlowException,降级会抛出降级异常DegradeException),您可以根据异常信息进行后续业务处理。