SQL限流 本文介绍DRDS管理命令中的的SQL限流相关命令和使用示例。 背景信息 在实际生产环境中,数据库资源(例如CPU、内存、I/O等)有限,当某一资源使用达到上限时,大量并发SQL查询可能因资源不足而超时,从而影响业务可用性。为了让高优先级甚至直接影响核心业务的查询能够获得足够资源,而低优先级获得较少的资源(甚至可以限制低优先级任务不在此时执行),DRDS提供了节点级别的SQL限流功能来解决上述问题。 SQL限流是一种对SQL的查询速度进行限制的能力,让用户能够在核心业务的查询受到其他边缘业务查询排挤的情况下,快速采取措施限制边缘业务的查询,以恢复核心业务,从而保证数据库的持续稳定运行。 创建限流规则 语法 plaintext UDAL CCL CREATE cclrulename ON database TO ' '@' ' FOR { UPDATE SELECT INSERT DELETE } [ filteroptions ] WITH { maxconcurrencyoption maxmergerowsoption } filteroptions: [ FILTER BY KEYWORD('KEYWORD1', 'KEYWORD2',...) ] [ FILTER BY QUERY ('select ...') ] maxconcurrencyoption: MAXCONCURRENCY value1 [ and WAITQUEUESIZE value2 ] [ and WAITTIMEOUT value3 ] maxmergerowsoption: MAXMERGEROWS value1 参数说明如下: 参数 是否必选 说明 cclrulename 是 限流规则的名称。 为避免名称与SQL关键字冲突,建议在规则名称的前后各加一个反引号()。 database 是 数据库的名称,支持使用星号()表示任意匹配。为避免名称与SQL关键字冲突,建议在数据库名称的前后各加一个反引号()。 ' '@' ' 是 账号名称,其中 支持用百分号(%)来表示任意匹配。 { UPDATE SELECT INSERT DELETE } 是 SQL操作类型,取值范围: SELECT DELETE UPDATE INSERT [ filteroptions ] 否 过滤条件,支持以下两种条件: 注意 一个语句只能选择一种过滤条件。 关键词(KEYWORD): 关键词按顺序在SQL语句中进行匹配,依次匹配到所有关键词,才算匹配成功。若关键字是SQL语句中的参数值,匹配时大小写敏感;若关键词是SQL语句中的其他词,匹配时大小写不敏感。 SQL语句(QUERY): 基于输入的SQL语句生成模版SQL,进而存储模版SQL的hashcode进行匹配。具体的模版SQL和hashcode可通过SHOW命令查询。 { maxconcurrencyoption maxmergerowsoption } 是 限流规则,支持以下两种规则: 注意 参数作用范围为每个DBProxy节点,而非整个DBProxy集群。 一个语句只能选择一种限流规则。 maxconcurrencyoption: MAXCONCURRENCY:必选参数,表示匹配到该限流规则的SQL语句的最大并发度。当最大并发度超过该值后,SQL语句将进入等待队列。 WAITQUEUESIZE:可选参数,表示超过并发度后的最大等待队列长度。当等待队列长度超过该值后,SQL语句将报错,默认为0。 WAITTIMEOUT:可选参数,表示SQL语句在等待队列中的最长等待时间。当超过该等待时间后,SQL语句将报错。单位为秒,默认值60。 maxmergerowsoption: 注意 该规则只能用于SELECT操作类型。 MAXMERGEROWS: 必选参数,表示匹配到该规则的SQL语句从数据节点DN(Data Node)拉取数据的最大行数。当超过该行数,SQL语句将报错。