更新时间:2024-11-06 GMT+08:00
使用GaussDB(for MySQL)的SQL限流
操作场景
SQL限流功能主要解决用户某类突发的并发过高的SQL导致GaussDB(for MySQL)实例不稳定的问题。
约束限制
- 满足如下版本要求的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账号不限制。
- 存储过程、触发器、函数内的SQL不限制。
操作步骤
- 登录管理控制台。
- 单击管理控制台左上角的,选择区域和项目。
- 在页面左上角单击,选择 。
- 在“实例管理”页面,选择目标实例,单击实例名称,进入实例概览页面。
- 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
- 选择“全量SQL > SQL限流”。
- 在“SQL限流”页面,开启SQL限流开关。
图1 开启SQL限流
- 单击“新建SQL限流规则”,选择需要限流的SQL类型、关键字以及最大并发数。
- 确认无误后,单击“确定”。
- 如果不需要此条限制,在SQL限流列表单击“删除”。在弹框中单击“确定”。