操作场景
GaussDB提供SQL限流功能,当存在异常SQL(如存在不优索引)、SQL并发量上升时,通过SQL限流功能控制异常SQL的访问量或者并发量,保障服务的可用性。
前提条件
登录账号需要具备授权项“gaussdb:instance:listFlowlimit”、“gaussdb:instance:flowlimitAddOrUpdate”和“gaussdb:instance:flowlimitDelete”。
约束限制
GaussDB实例的数据库引擎版本需要大于等于V2.0-8.0.1,内核版本大于等于505.0.0。
分布式不支持自治限流任务。
不支持对系统级别用户(例如root等)进行SQL限流。
当前不支持批量删除SQL限流任务。
每个实例最多支持1000条限流任务。
对于关键词限流任务,一个关键词中包含英文逗号视作以逗号分隔的两个关键词,作用时不区分关键词前后顺序。
用户通过系统级别用户(例如root等)进行后台SQL限流的增删改,会导致实际限流任务情况与前端不一致。
限流规则匹配会消耗CPU性能,建议同一个实例里不要创建大量限流规则。
新添加SQL限流规则之前已经开始执行的SQL语句不会被计入并发数。
容灾场景下,主实例上的限流规则会自动同步到备实例,容灾升主后暂时不支持限流规则的增删改查,切回原实例后可继续管理限流任务。
备份恢复到新实例、容灾场景切回原实例,如果出现数据丢失的情况,请参考故障处理。
实例异常和规格变更期间允许创建、修改、查看限流规则,但可能会失败,如果出现失败或异常可以通过删除限流规则处理,删除前请确保数据库正常。
驱动建立数据库连接涉及的SQL语句(如:select setting from pg_settings where name='delimiter_name')被限流会导致无法新建连接,不允许该类SQL的限流操作。
实例节点在创建、重启过程中(比如扩副本、扩分片),可能会因为节点无法连接导致SQL限流任务详情查询异常。
内核如果抛出报错信息,如ERROR: The workload rule takes effect and this request will be cancelled. rule_id: x, rule_name: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",其中rule_name对应Console控制台“限流任务ID”,对应审计日志task id。
避免创建同名表。如果不同Database或不同SCHEMA下存在同名表,创建该表相关的SQLID限流任务时,限流规则可能不生效。
自治限流场景下,当CPU利用率、内存利用率、并发数(最大活跃会话数)三者均超过阈值,才会触发自治限流规则生效。
创建限流任务
步骤 1 登录管理控制台。
步骤 2 单击管理控制台左上角的 ,选择区域和项目。
步骤 3 在页面左上角单击 ,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。
步骤 4 在“实例管理”页面,选择指定的实例,单击实例的名称,进入实例详情页面。
步骤 5 选择“诊断优化 > SQL诊断 > SQL限流”。
步骤 6 选择“SQL限流任务”或“自治限流任务”,单击“创建任务”,填写限流信息,具体参数填写请参考下表。
创建SQL限流任务
表 SQL限流任务参数
| 限流任务类型 | 参数名 | 参数说明 |
|---|---|---|
| SQLID | 限流任务名称 | 自定义SQL限流任务名称。 |
| SQL模板 | 系统会记录各个节点的SQL语句执行记录,并转化成一个模板。用户可以选择该模板下发到各节点上进行SQL限流。 说明 当某个实例重启时,该实例节点的SQL模板会清空。 | |
| 并发数 | 同一时间该节点执行被限制SQL的最大活跃连接数。 | |
| 生效时间 | 选择限流生效时间。 | |
关键词 说明
| 限流任务名称 | 自定义SQL限流任务名称。 |
| SQL类型 | SQL类型,只支持select,insert,update,delete,merge五种类型。 | |
| 关键词 | 限流任务匹配的关键词,限流任务根据该关键词加上SQL类型进行语句匹配,匹配到的SQL将会限流。 | |
| 作用库 | 限流作用的数据库。 | |
| 并发数 | 同一时间该节点执行被限制SQL的最大活跃连接数。 | |
| 生效时间 | 选择限流生效时间。 |
创建自治限流任务
表 自治限流任务参数
| 参数名 | 参数说明 |
|---|---|
| 限流场景选择 | 触发限流的条件场景,目前只支持阈值条件触发。 |
| 限流任务名称 | 限流任务名称。 |
| CPU利用率 | 该节点触发限流的CPU利用率阈值,当同时超过内存利用率设定阈值条件时限流生效,不支持和内存利用率阈值同时为0,如果选择只限制CPU、内存中的其中一个,则另一个必须传值0。 |
| 内存利用率 | 该节点触发限流的内存利用率阈值,当同时超过CPU利用率设定阈值条件时限流生效,不支持和内存利用率阈值同时为0,如果选择只限制CPU、内存中的其中一个,则另一个必须传值0。 |
| 并发数 | 同一时间该节点执行任意操作命令的最大活跃连接数。 |
步骤 7 单击“创建”,提交创建SQL限流。
步骤 8 创建完成后,可以查看任务限流状态或修改限流任务。
单击 “详情”,查看任务限流状态。
选择一个限流任务,单击“修改”,可以修改限流任务。
选择一个限流任务,单击“删除”,可以删除限流任务。
说明
当规则修改、重启、主备倒换等变更之后,限流任务拦截次数会清空。
----结束