更新时间:2024-01-31 GMT+08:00
分享

SQL限流

针对新上业务不能及时发包优化的SQL和突发流量导致CPU等资源100%瓶颈的场景,SQL限流功能通过控制既定SQL规则的并发度协助业务侧及时流控,保证核心业务的稳定运行。

使用须知

  • 满足如下版本要求的GaussDB(for MySQL)可以使用SQL限流功能。
    • 内核版本大于等于2.0.28.15且小于2.0.28.40
    • 内核版本大于等于2.0.29.1
  • 单个限流规则最大支持128个关键字。
  • 关键字中不允许包含“\t”、“\r” 、“\n”, 关键字不能是单个反斜杠(\) 或单个空字符(' ')。
  • 关键字首尾或中间的空格都会被忽略掉。
  • 限流规则不能以“~”结尾。
  • 限流规则对关键字有顺序要求,会按照关键字设置顺序进行匹配。如关键字设置为a~and~b,“xxx a>1 and b>2”语句符合关键字顺序会被限流,“xxx b>2 and a>1”语句因不符合关键字顺序而不会被限流。
  • 添加SQL限流规则后,已经执行中的SQL不会被新添加的规则限制,只有系统新收到的SQL才会进行规则匹配。
  • 若主节点和只读节点设置了不一样的限流规则,实例主节点和只读节点倒换之后,新的主节点规则和原来的只读节点一样,新的只读节点规则和原来的主节点一样。
  • 当SQL语句匹配多条限流规则时,优先生效最新添加的规则,之前的规则将不再生效。
  • 在添加SQL限流规则之前,已经开始执行的SQL语句,不会被记入并发数。
  • 单个SQL类型(SELECT、UPDATE、DELETE)的所有规则和对应的并发数加起来长度不能超过1024 bytes。
  • 当限流规则数量较多时,SELECT/UPDATE/DELETE语句会有小幅度的性能劣化。
  • 限流SQL的匹配规则为前缀匹配。例如:限流规则为“SELECT~COUNT~t1”, SQL语句“SELECT COUNT(*) FROM t1”“SELECT COUNT(*) FROM t1 LIMIT 1”都会被拦截。
  • 限流触发后业务侧会收到执行报错,报错信息为“ERROR 1317 (70100): Query execution was interrupted”
  • 以下场景不受SQL限流的限制:
    • 系统表不限制。
    • 不涉及数据查询的语句不限制,如"select sleep(xxx)"语句。
    • root账号在内核版本小于2.0.45.230900时,不受SQL限流限制。
    • 存储过程、触发器、函数内的SQL不限制。

操作步骤

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域和项目。
  3. 单击页面左上角的,选择“数据库 > 数据管理服务 DAS”,进入数据管理服务页面。
  4. 在左侧的导航栏中单击DBA智能运维 > 实例列表页签,进入DBA智能运维实例列表页面。

    您也可以在产品概览页面,单击“进入DBA智能运维”,进入DBA智能运维实例列表页面。

  5. 在实例列表页面右上角,按照引擎、实例名称或者实例IP筛选实例。

    图1 筛选实例

  6. 选择目标实例,单击“详情”,进入DBA智能运维总览页面。
  7. “SQL”页签下选择“SQL限流”
  8. “SQL限流”页面,开启SQL限流开关。
  9. 单击“新增SQL限流”,选择需要限流的SQL类型,设置关键字以及最大并发数。

    图2 设置页面

    • 关键字:设置关键字时,您可以选择直接输入关键字,也可以选择将原始SQL拷贝到输入框中然后单击“生成关键字”,将原始SQL转换成关键字。

      原始SQL转换成的关键字仅供参考,请谨慎使用。

      关键字规则举例:

      例如关键字是"SELECT~a>1", 含义为: SELECT以及a>1为该并发控制所包含的两个关键字,~为关键字间隔符,即若执行SQL命令包含SELECT与a>1两个关键字视为命中此条并发控制规则。

    • 最大并发数:即满足同一规则的语句最大并发数,超过最大并发数会被拒绝执行。

  10. 确认无误后,单击“确定”

    若不再需要此条SQL限流规则,可以在SQL限流列表页单击“删除”,删除SQL限流规则。

分享:

    相关文档

    相关产品