SQL事前巡检插件

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

该文章讨论了SQL问题引发的线上事故,并提出了通过开发SQL巡检插件来自动检测有问题的SQL的解决方案。该插件利用SQL拦截器拦截系统执行的SQL,并通过解析和加密SQL语句进行预警。通过执行计划分析和表和查询条件分析,及时发现索引未使用和条件不符合规则的SQL,并记录到巡检平台。巡检平台提供报警阈值管理和校验规则管理等功能,并支持一键分析和建议。通过自动巡检和及时预警,可以在测试预发环境发现并修复SQL问题,避免带到线上,并提供优化建议。

🔎

延伸解读

插件如何在不影响业务的前提下工作

插件通过SQL拦截器捕获系统执行的SQL,并利用异步线程池解析,避免阻塞主流程。解析时忽略具体入参,仅对SQL语句进行MD5加密,并缓存已拦截的MD5值,可自定义缓存时间,防止重复解析相同SQL。接入时支持手动指定数据源(主或从)来执行explain等操作,从而保障业务系统的稳定性。

巡检平台的两类核心检测机制

平台首先通过执行计划分析,检查possible_keys和key字段,判断索引是否被使用,未使用则预警。其次进行表和查询条件分析,依据平台配置的校验规则(支持正则表达式)检查查询条件是否符合要求,例如某表必须使用特定字段。不符合规则的SQL也会触发预警,并记录到平台。

预警信息包含哪些关键内容

预警通知会包含描述(如索引未使用或条件不符合规则)、traceId、执行方法、SQL内容以及系统名称。这些信息有助于快速定位问题SQL及其来源,方便研发人员及时处理。平台还提供报警阈值管理和校验规则管理,满足不同系统的差异化需求。

如何利用大模型辅助SQL治理

巡检平台会将问题SQL展示出来,并支持一键分析。由于平台已获取执行计划结果和建表语句,这些信息可提交给ChatGPT等大模型进行分析,返回优化建议,辅助用户进行治理。这有助于研发快速修复问题,提升SQL质量。

❓

Q&A

SQL巡检插件的主要功能是什么?

SQL巡检插件主要用于自动检测有问题的SQL,通过拦截和解析SQL语句进行预警,及时发现索引未使用和条件不符合规则的SQL。

为什么SQL性能问题在预发环境中难以发现?

SQL性能问题在预发环境中难以发现,主要是因为业务增长可能导致原本正常的SQL出现问题,且DBS慢SQL无法实时报警。

如何通过SQL巡检插件避免线上事故?

通过SQL巡检插件的自动巡检和及时预警,可以在测试预发环境发现并修复SQL问题,避免将问题带到线上。

SQL巡检平台提供哪些管理功能?

SQL巡检平台提供报警阈值管理和校验规则管理等功能,支持一键分析和建议,帮助用户进行治理。

SQL巡检插件如何处理重复SQL?

SQL巡检插件通过MD5加密SQL语句并缓存之前拦截过的MD5值,以防止重复SQL的解析。

SQL巡检插件如何进行SQL执行计划分析?

SQL巡检插件通过explain/show create table分析SQL执行计划,检查索引是否使用,并及时预警未使用的索引。

🏷️

标签

➡️

继续阅读