文档

【通知】慢SQL的模板化算法优化

更新时间:

变更背景

当前慢SQL链路会对每条SQL进行SQL模板化处理,即对原始SQL去除变量参数后得到SQL模板,再对SQL模板进行加密获得SQLHASH。例如,原始SQL为select name, age, score from study where age > 20 and score > 10时:

  1. 进行模板化处理后为SQL_TEMPLATE = select name, age, score from study where age > $0 and score > $1

  2. 对模板进行加密后获得SQLHASH03d4d020ddcdfbda9399bf068934aa54

  3. SQLHASH进行分钟级聚合计算,得到每一类SQL的性能统计数据。

变更内容

慢SQL的模板化算法优化如下:

  • 提升效率,降低计算资源消耗。

  • 优化相同类型的SQL的模板化算法,同一类的SQL进行模板化后,生成一个模板。

    • 原始SQL:

      INSERT INTO study (name, age, score) VALUES ('jam', 10, 90)
      INSERT INTO study (name, age, score) VALUES ('jam', 10, 90),('sam', 11, 80)
    • 优化前的模板为:

      INSERT INTO study (name, age, score) VALUES ($0, $1, $2)
      INSERT INTO study (name, age, score) VALUES ($0, $1, $2),($3, $4, $5)
    • 优化后的模板如下,可以避免大量重复的模板生成(本质是同一类INSERT):

      INSERT INTO study (name, age, score) VALUES (?, ?, ?)
  • 对DDL语句进行粗粒度模板化,例如MySQL中的DDL,会被统一模板化成以下几类:

    "CREATE DATABASE ?", "CREATE TABLE ?", "CREATE INDEX ?", "CREATE VIEW ?", "ALTER DATABASE ?", "ALTER TABLE ?", "DROP DATABASE ?", "DROP TABLE ?", "DROP INDEX ?", "DROP VIEW ?", "TRUNCATE TABLE ?", "RENAME TABLE ?", "RENAME DATABASE ?"
  • 解决慢SQL样本少的问题。优化前,系统在10分钟内至少采样一条原始慢SQL;优化后,采样该模板下的每一条原始慢SQL,方便用户排查问题。

变更时间

2023年12月13日起,逐步应用于各地域。

变更范围及影响

变更范围

涉及的数据库引擎包括:RDS MySQLRDS PostgreSQLRDS SQL Server、RDS MariaDB和PolarDB MySQL版

变更影响

调用慢SQL的OpenAPI接口DescribeSlowLogsDescribeSlowLogRecords时,SQLText(SQL语句)对应的SQLHash(SQL语句唯一标识符)的值会变化,例如select * from study语句对应的SQLHash值,升级前为:1ea57614450625240886f90fd99f90b8,升级后会变为19d4d020ddcdfbda9399bf068934aa54

相关API

数据库引擎

API

描述

  • RDS MySQL

  • RDS PostgreSQL

  • RDS SQL Server

  • RDS MariaDB

DescribeSlowLogs

查看慢SQL统计信息。

DescribeSlowLogRecords

查看慢SQL明细。

PolarDB MySQL版

DescribeSlowLogs

查看慢SQL统计信息。

DescribeSlowLogRecords

查看慢SQL明细。

  • 本页导读 (1)
文档反馈