当前通讯!GaussDB(DWS)查询过滤器原理与应用
摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行。
本文分享自华为云社区《GaussDB(DWS)查询过滤器原理与应用》,作者:门前一棵葡萄树 。
一、概述
GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行。
(资料图)
主要应用场景包含以下两种:
1. 异常熔断机制
配置异常规则后,查询触发异常规则后,异常信息将被记录在dbms_om.gs_blocklist_query系统表中。同一个查询触发异常规则次数超限(query_exception_count_limit)后,查询自动加入黑名单,黑名单信息同样保存在dbms_om.gs_blocklist_query系统表中。加入黑名单后,该查询将被隔离,拒绝执行。
2. 紧急拦截
作业引发CORE、hang或性能大幅下降等问题时,需要紧急规避时,可以将作业加入黑名单进行过滤。
原理介绍
查询过滤器使用作业Unique SQL ID保存和识别作业黑名单和异常信息,在SQL中常数值发生变化时作业Unique SQL ID不会随之发生变化。Unique SQL ID是遍历查询解析树计算出来的一个整数值,用于标识一类SQL。通常对于DML语句,在计算Unique SQL ID的过程中会忽略常量值。但对于DDL、DCL以及设置参数等语句,常量值不会忽略。例如,以下两个查询:
select * from t1 where id = 1;select * from t1 where id = 2;
这两条SQL除过滤条件中的常量不同外,其他全部相同,由此生成的解析树拓扑完全相同,因此Unique SQL ID相同。Unique SQL ID的计算只会忽略常数值,而不会忽略其他差异,SQL语句“select * from t2 where id = 1;”与上述两个SQL的Unique SQL ID就不相同。
将作业加入黑名单主要有以下两种方式:
- 在GUC参数query_exception_count_limit≥0情况下,作业触发异常次数超过该阈值后自动将作业加入黑名单;
- 调用内置函数gs_append_blocklist(unique_sql_id int8)将作业加入黑名单。
作业执行前判断作业是否在黑名单中,如果作业在黑名单中,拒绝作业执行,直接报错退出。
作业被拒绝执行后,对作业加入黑名单原因进行分析,问题解决后调用内置函数gs_remove_blocklist(unique_sql_id int8)将作业移除黑名单。
二、应用示例
2.1 异常熔断示例
1. 设置异常熔断阈值。假设设置query_exception_count_limit=1,即只要作业触发异常规则作业就会被加入黑名单。
2. 配置异常规则
创建CPU平均使用率异常规则cpu_percent_except,作业运行时间超过2000秒且CPU使用率达到30%时触发异常退出:
CREATE EXCEPT RULE cpu_percent_except WITH(ELAPSEDTIME=2000, CPUAVGPERCENT=30);
异常规则还支持BLOCKTIME、ALLCPUTIME、SPILLSIZE等异常的识别处理,具体可参考:异常规则简介与演变。
3. 创建资源池respool1关联异常规则cpu_percent_except。
CREATE RESOURCE POOL respool1 WITH(except_rule="cpu_percent_except");
资源池支持最多关联63个异常规则集,每个异常规则集间独立生效,互不影响。
4. 创建业务用户usr1,关联资源池respool1:
CREATE USER usr1 RESOURCE POOL "respool1" PASSWORD "XXXXXX";
5. 用户usr1运行作业,作业运行时间超过2000秒且CPU使用率达到30%时触发“cpu_percent_except”异常规则,作业触发异常规则后资源管理对作业进行以下处理:
- 将作业异常信息保存至系统表GS_BLOCKLIST_QUERY中;
- 如果作业触发异常熔断,将系统表GS_BLOCKLIST_QUERY中作业黑名单标志置为true;
- 更新GS_BLOCKLIST_QUERY中作业黑名单信息。
6. 查询作业黑名单和异常信息:
SELECT * FROM dbms_om.gs_blocklist_query; unique_sql_id | block_list | except_num | except_time---------------+------------+------------+---------------------------- 4066836196 | t | 1 | 2022-08-08 18:00:00.596269(1 row)
7. 用户usr1再次运行作业触发异常熔断,GaussDB(DWS)的异常熔断机制禁止该作业执行。
ERROR: The query is in the blocklist and cannot be run, unique_sql_id(4066836196).HINT: If you want to run the query later, confirm the reason why the query is blocklisted and remove the query from the blocklist after resolving the problem.
8. 优化用户usr1所运行ID为4066836196的SQL后,将ID为4066836196的SQL从黑名单移除。
确认SQL异常原因,如果异常规则配置不合理,修改异常规则;如果异常规则合理,对SQL进行优化后重新运行。确认问题解决后将SQL移除黑名单。
select gs_remove_blocklist(4066836196); gs_remove_blocklist--------------------- t(1 row)
2.2 紧急拦截示例
查询过滤器使用作业Unique SQL ID识别和保存黑名单信息,为有效运用查询过滤器紧急拦截功能,建议TopSQL开启,在作业引发CORE、报错、性能下降等问题时可以快速获取作业Unique SQL ID。
2.2.1 获取作业Unique SQL ID
获取作业Unique SQL ID的几种方法:
1. 作业引发报错/性能下降
CN日志中获取作业query_id,执行以下命令查询作业Unique SQL ID。
select queryid,unique_sql_id,query from pgxc_wlm_session_info where queryid=query_id;
2. 作业引发CN示例CORE
解析CORE打印内存中保存的Unique SQL ID对应的变量参数值。
3. 作业引发DN实例CORE
作业引发DN实例CORE时,CN侧体现为作业报错,Unique SQL ID获取方式可以参考作业报错时Unique SQL ID获取方式。
4. EXPLAIN VERBOSE获取Unique SQL ID(通用方法,但是仅821及以上版本支持)
EXPLAIN VERBOSE不会实际执行SQL,因此一般不会导致问题发生,使用EXPLAIN VERBOSE XXX;可以打印得到作业Unique SQL ID。示例:
postgres=# explain verbose select count(1) from pg_class; QUERY PLAN------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- id | operation | E-rows | E-distinct | E-width | E-costs ----+----------------------------------------+--------+------------+---------+--------- 1 | -> Aggregate | 2 | | 8 | 52.94 2 | -> Seq Scan on pg_catalog.pg_class | 1034 | | 0 | 50.34 Targetlist Information (identified by plan id) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 --Aggregate Output: count(1) 2 --Seq Scan on pg_catalog.pg_class Output: relname, relnamespace, reltype, reloftype, relowner, relam, relfilenode, reltablespace, relpages, reltuples, relallvisible, reltoastrelid, reltoastidxid, reldeltarelid, reldeltaidx, relcudescrelid, relcudescidx, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasoids, relhaspkey, relhasrules, relhastriggers, relhassubclass, relcmprs, relhasclusterkey, relrowmovement, parttype, relfrozenxid, relacl, reloptions, relreplident, relfrozenxid64 ====== Query Summary ===== -------------------------- Parser runtime: 0.027 ms Planner runtime: 0.561 ms Unique SQL Id: 2307078791(17 rows)
2.2.2 将作业加入黑名单
获取到作业Unique SQL ID后,调用内置函数gs_append_blocklist(unique_sql_id int8)将作业加入黑名单:
postgres=# select * from gs_append_blocklist(2307078791); gs_append_blocklist--------------------- t(1 row)
2.2.3 查询黑名单信息
作业加入黑名单后,查询系统表确认黑名单加入是否成功:
postgres=# SELECT * FROM dbms_om.gs_blocklist_query; unique_sql_id | block_list | except_num | except_time---------------+------------+------------+------------- 2307078791 | t | 0 |(1 row)
2.2.4 再次执行作业触发紧急拦截
postgres=# select count(1) from pg_class;ERROR: The query is in the blocklist and cannot be run, unique_sql_id(2307078791).HINT: If you want to run the query later, confirm the reason why the query is blocklisted and remove the query from the blocklist after resolving the problem.
2.2.5 问题解决,将作业移出黑名单
postgres=# select gs_remove_blocklist(2307078791); gs_remove_blocklist--------------------- t(1 row)
点击关注,第一时间了解华为云新鲜技术~
标签:
相关推荐:
最新新闻:
- 当前通讯!GaussDB(DWS)查询过滤器原理与应用
- 【环球新要闻】天宫TV | “圆梦乘组”与“博士乘组”梦幻联动!
- 端午假期前一天北京至淄博高铁一票难求 每日讯息
- 3辆全新特斯拉超跑竟被遗弃中国码头13年!原车主身份不简单
- 2023年房屋征收,拆迁补偿协商处理,这5点要注意
- 深南电A:下属南山热电厂已进行虚拟电厂备案,暂未实质性运行
- 天天观焦点:11年吉林男子欠银行199元,8年后猛增到1.5万,行长:正常涨利息
- 英国5月房价同比下跌1%,为11年来首次年率下跌-全球简讯
- 全球球精选!新巨丰拟收购纷美包装股权,深交所下发重组问询函
- 淄博在全省首推“无还本续贷”创业担保贷款,企业无需还本也可续贷|全球观速讯
- 摩通:放宽一线城市限购料对内房销售影响轻微 头条
- 世界消息!手机问题:vivoS9e怎么隐藏应用
- 某房企四大名著烂尾项目!
- 手机问题:vivoS9e怎么设置门禁卡_前沿资讯
- 【天天聚看点】海关总署:前5个月民营企业进出口总额同比增长13.1%
- 环球快看:数列收敛的几何意义是什么_数列收敛的定义
- 俄罗斯最冷的地方是奥伊米亚康_俄罗斯最冷的地方
- 热点在线丨刚柔并济 软硬兼施_软硬兼施的意思
- Reddit现在原生支持图像库 这是它的工作方式_天天快播
- 哪两项著作被认为是荷兰创作的_哪两项著作被认为是荷马创作的
- 送子由使契丹阅读答案_送子由使契丹翻译及赏析
- 3dmax玻璃材质如何设置_教你如何快速设置 当前关注
- 信濠光电:目前,公司的3D防护玻璃主要应用于智能手机产品
- 今日要闻!洛克王国波塞冬平民过法_洛克王国波塞冬之蛋可以孵出什么
- 雪中悍刀行百度百科女主_雪中悍刀行百度百科 环球播资讯
- 和林微纳:NVIDIA为公司重要海外客户 公司与NVIDIA业务稳定
- 迪迦奥特曼被掐住脖子_迧迦奥特曼被捏jj
- 杰创智能:公司暂无人脑工程相关技术-全球新动态
- 桂陵之战马陵之战长平之战的时间_桂陵之战马陵之战长平之战
- 何首乌图片大全大图盆景_何首乌图片 天天热头条
- 洛克王国波塞冬之蛋能孵出什么 怎么得_4399洛克王国_洛克王国波塞冬蛋能孵出什么宠物
- 当前热讯:河钢集团6月硅锰首轮询盘6850元/吨
- 滨江集团:今年截至目前交付的项目已超过10个 每日头条
- 笔记本电脑进入休眠状态怎么办_电脑进入休眠状态怎么办 今日快讯
- 深交所:腾信创新终止上市 6月15日起进入退市整理期_天天微动态
- 如何修改wifi密码详细步骤_今日热搜
- 上海市消保委呼吁制定细化外卖包装收费规则 把选择权交给消费者
- 优博讯:公司暂未与英伟达有直接合作
- 当前速讯:2023年房屋征收,拆迁补偿协商处理,这5点要注意
- 新巨丰拟收购纷美包装股权,深交所下发重组问询函
- 靖江“智慧”养老开启新模式
- 今日成交额最高的信用债为“23安交01”_视讯
- 纽威股份:纽威集团拟减持不超2%公司股份 时讯
- 当前关注:信濠光电:公司尚未涉及光模块CPO业务
- 天源环保:与华中科大正在研发的污泥碳化和生物质秸秆碳化研发项目采用了热储能技术_看点
- 苏州与北京银行签署战略合作协议 北京银行苏州分行揭牌|全球通讯
- 北京开启不动产登记“跨省通办”新模式
- 如何应对生成式大模型「双刃剑」?之江实验室发布《生成式大模型安全与隐私白皮书》
- 世界新消息丨国内商品期市日间盘多数收跌 甲醇跌超3%
- 6月7日美棉M1-1/8到港价涨67元/吨 报16518元/吨
- 护航高考丨逐梦追光 听见青春
- 意法半导体携手三安光电,推进中国碳化硅生态系统发展
- 【全球快播报】今日79股涨停 主要集中在电子、传媒等行业
- 国金证券:能拿好地且快速去化的房企更加受益
- 信达证券:欧美充电桩市场步入快速发展期 市场空间大
- 安溪以优秀文艺宣传贯彻党的二十大精神 快报
- 「基层工作者」洛江区双阳街道:以真心真情服务民情
- 华工科技涨停-全球短讯
- 信达证券:欧美充电桩市场步入快速发展期 市场空间大_全球快消息
- 焦点速递!雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警
- 【世界时快讯】江苏黄沙港特大桥顺利合龙 预计6月底完工
- 赴考满分!送考满分!高考首日,好的故事开头
- 今天高考返程和赴考时段广州有雷阵雨 世界快看
- 焦点观察:和胜股份:在项目研发前沿领域一直与宁德时代深度合作
- 收盘丨A股三大指数走势分化,创业板指跌1.61% 前沿热点
- 世界通讯!外交部:对卡霍夫卡水电站堤坝被破坏表示严重关切
- 塔克拉玛干沙漠腹地最大集中式光伏电站正式并网发电
- 6月7日东营益盛醋酸丁酯报价下调 每日热文
- 荷兰警方在泽兰省截获多批可卡因
- 美国波音787型“梦想客机”因生产缺陷将再次延迟交付
- 全球观点:吉尔吉斯斯坦安全部门拘留30余名组织骚乱嫌疑人
- 中美军事部门对话暂时没有恢复,美方呼吁沟通,外交部回应
- 【全球独家】中国芯片稳步推进,美国芯片行业已现颓势,韩荷认清了现实
- 艾迈斯欧司朗推出适用于舱内传感的新款红外VCSEL发射器,新增可靠的内置人眼安全功能
- 天天快报!塞尔达传说王国之泪你是萨派还是科派任务怎么做[多图]