更新时间:2025-09-19 GMT+08:00

使用TaurusDB的SQL限流

操作场景

SQL限流是指通过设置语句类型、关键字等匹配SQL语句,当所匹配的SQL语句超过设置的最大并发数时,数据库实例会拒绝执行此SQL,从而解决SQL并发数过高导致的实例不稳定问题,并支持查看当前限流规则已拦截次数。

您也可以基于SQL的执行时间或执行次数,识别出性能消耗最高的SQL语句,并为这些高负载SQL创建相应的限流规则。

执行新增限流规则、删除限流规则、节点重启、SQL限流开关操作或者限流规则过期时,所有SELECT/UPDATE/DELETE/INSERT类型的限流规则将重新生成。重新生成的限流规则的当前并发数以及已拦截次数将清零重新计算。

版本约束

满足如下版本要求的TaurusDB可以使用SQL限流功能。
  • 内核版本大于等于2.0.28.15且小于2.0.28.40时,支持SELECT、UPDATE、DELETE类型的限流规则。
  • 内核版本大于等于2.0.29.1时,支持SELECT、UPDATE、DELETE类型的限流规则。
  • 内核版本大于等于2.0.54.240600时,支持SELECT、UPDATE、DELETE、INSERT类型的限流规则。

内核版本的查询方法请参见如何查看云数据库 TaurusDB实例的版本号

约束限制

表1 限流规则约束

场景

约束

设置限流规则

  • 单个限流规则最大支持128个关键字,关键字不能是单个反斜杠(\) 或单个空字符(' ')。关键字首尾的空格和特殊空白字符(如'\t'、'\r'、'\n')都会被忽略掉。
  • 限流规则不能以“~”结尾。
  • TaurusDB内核版本大于等于2.0.54.240600时,单个SQL类型(SELECT、UPDATE、DELETE、INSERT)的所有规则和对应的并发数加起来长度不能超过4000 bytes,单条规则长度不能超过1000 bytes。
  • TaurusDB内核版本小于2.0.54.240600时,单个SQL类型(SELECT、UPDATE、DELETE)的所有规则和对应的并发数加起来长度不能超过1024 bytes。

匹配限流规则

  • 限流规则对关键字有顺序要求,会按照关键字设置顺序进行匹配。如关键字设置为a~and~b,“xxx a>1 and b>2”语句符合关键字顺序会被限流,“xxx b>2 and a>1”语句因不符合关键字顺序而不会被限流。
  • 添加SQL限流规则后,已经执行中的SQL不会被新添加的规则限制,只有系统新收到的SQL才会进行规则匹配。
  • 若主节点和只读节点设置了不一样的限流规则,实例主节点和只读节点倒换之后,新的主节点规则和原来的只读节点一样,新的只读节点规则和原来的主节点一样。
  • 当SQL语句匹配多条限流规则时,优先生效最新添加的规则,之前的规则将不再生效。
  • 在添加SQL限流规则之前,已经开始执行的SQL语句,不会被记入并发数。
  • 限流SQL的匹配规则为前缀匹配。例如:限流规则为“SELECT~COUNT~t1”, SQL语句“SELECT COUNT(*) FROM t1”和“SELECT COUNT(*) FROM t1 LIMIT 1”都会被拦截。
  • 执行新增限流规则、删除限流规则、节点重启、SQL限流开关操作或者限流规则过期时,所有SELECT/UPDATE/DELETE/INSERT类型的限流规则将重新生成。重新生成的限流规则的当前并发数以及已拦截次数将清零重新计算。

推荐规则

  • SQL限流规则列表中存量限流规则的创建时间将展示为“新增限流规则时支持设置规则时效”功能的上线时间,新增的限流规则的创建时间不受此约束。
  • root账号执行的SQL不在推荐规则的范围内。
  • SQL语句长度超过1000 bytes会自动截断,使用推荐规则时需要手动修改为合法SQL语句。
  • 推荐规则仅从持续时间最长的1000个会话内进行统计。

不受SQL限流限制的场景

  • 系统表不限制。
  • 不涉及数据查询的语句不限制,如“select sleep(xxx);”语句。
  • root账号不限制。
  • 存储过程、触发器、函数内的SQL不限制。

限流规则的影响

  • 当限流规则数量较多时,SELECT/UPDATE/DELETE/INSERT语句会有小幅度的性能劣化。
  • 限流触发后业务侧会收到执行报错,报错信息为“ERROR 1317 (70100): Query execution was interrupted”。

新增限流规则

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 在页面左上角单击,选择数据库 > 云数据库 TaurusDB
  4. 在“实例管理”页面,选择目标实例,单击实例名称,进入实例概览页面。
  5. 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
  6. 选择“全量SQL > SQL限流”。
  7. “SQL限流”页面,开启SQL限流开关。
  8. 单击“新建SQL限流规则”,选择需要限流的SQL类型、关键字以及最大并发数。

    图1 新建SQL限流规则

    表2 SQL限流规则参数

    参数

    说明

    SQL类型

    支持选择四种类型:SELECT、UPDATE、DELETE、INSERT。

    关键字

    最多支持128个关键字,不区分大小写。支持以下两种方式输入关键字。

    • 直接输入关键字:例如关键字是“select~a”,含义为:select以及a为该并发控制所包含的两个关键字,~为关键字间隔符,也就是说如果执行SQL语句中包含select与a两个关键字,那么命中此条并发控制规则。
    • 原始SQL生成关键字:输入原始SQL再单击“生成关键字”,生成的关键字仅供参考,请谨慎使用。

    关键字根据顺序匹配SQL语句。例如:a~and~b只会匹配*** a>1 and b>2,而不会匹配*** b>2 and a>1。

    单个关键字首尾的空白字符会被忽略,包括' '、'\n'、'\r'、'\t'等。

    最大并发数

    输入最大并发数,与关键字匹配的SQL语句如果超过最大并发数会被拒绝执行。取值范围为0~1000000000。

    kill满足规则的已有会话

    勾选此选项后,会结束所有受SQL限流规则控制的账户所产生的会话。

    同步规则给其他节点

    勾选此选项后,将新增的限流规则同步给同一实例的其他节点。

    设置规则时效

    SQL限流规则的生效时间。

    • 永久:选择此选项,表示新增的SQL限流规则永久生效。
    • 限时:设置的时间为SQL限流规则的失效时间,生效的开始时间即新增操作的下发时间。失效时间可能存在延迟误差,最长不超过1分钟。

      失效时间最多可以选择当前时间后的两周。

  9. 确认无误后,单击“确定”
  10. 提示确认框中单击“确定”。

推荐规则

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 在页面左上角单击,选择数据库 > 云数据库 TaurusDB
  4. 在“实例管理”页面,选择目标实例,单击实例名称,进入实例概览页面。
  5. 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
  6. 选择“全量SQL > SQL限流”。
  7. 单击“推荐规则”。
  8. 弹框中选择规则查询条件,支持按“平均执行时间”和“执行次数”筛选TOP SQL。

  9. 单击“确定”。
  10. 如果您需要为筛选的高负载SQL进行SQL限流,单击操作列的“SQL限流”,弹框中新建SQL限流规则。更多内容请参考新增限流规则

删除限流规则

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 在页面左上角单击,选择数据库 > 云数据库 TaurusDB
  4. 在“实例管理”页面,选择目标实例,单击实例名称,进入实例概览页面。
  5. 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
  6. 选择“全量SQL > SQL限流”。
  7. 选择目标SQL限流规则,单击操作列的“删除”。

    您也可以选择一条或多条限流规则,单击上方的“批量删除”。

  8. 弹框中确认删除的限流规则信息,如果勾选“同步规则给其他节点”,表示同一实例的其他节点的限流规则也会被删除,确认无误后单击“确定”。

    图2 删除限流规则