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)
点击关注,第一时间了解华为云新鲜技术~
标签:
-
2022-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2022-02-07 14:57:40
中吉签署关于经典著作互译出版的备忘录 开启两国人文交流互鉴新阶段<
新华社北京2月6日电(记者史竞男)国家主席习近平6日会见来华出席北京2022年冬奥会开幕式的吉尔吉斯斯坦总统扎帕
-
2023-06-08 02:40:22
GaussDB(DWS)查询过滤器原理与应用
摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔
-
2023-06-08 02:45:08
世茂能源06月07日主力资金大幅流出
世茂能源06月07日主力资金净流出751 33万元,涨跌幅为-1 41%,主力净量
-
2023-06-08 02:24:56
商品期货收盘多数下跌,甲醇跌3%,纸浆、尿素、纯碱跌超2% 每日视讯
方正期货表示进口木浆现货市场成交氛围平平,价格稳中略降。目前浮法
-
2023-06-08 01:41:24
官旗促销 爱奇艺黄金会员年卡+京东plus年卡 138元_观热点
官旗促销爱奇艺黄金会员年卡+京东plus年卡138元
-
2023-06-08 01:24:27
世界焦点!广东2023年夏季高考首场考试顺利进行,70万考生奔赴考场
文 羊城晚报全媒体记者孙唯6月7日,广东省2023年普通高考首场语文科目
-
2023-06-08 01:10:25
平潭老字号“逆龄”成长的秘密-热头条
“希望通过宋锦记海洋科技食品加工园项目,让‘宋锦记’这个平潭老字号
-
2023-06-08 00:56:35
先达股份:年产1000吨咪唑烟酸、3000吨农药中间体项目试生产
先达股份公告,公司全资子公司辽宁先达农业科学有限公司年产1000吨咪唑
-
2023-06-08 00:52:05
当前信息:融创提请股东大会授予董事发行不超已发行股份数目的20%新股
公司谨订于6月30日举行股东周年大会 财经网讯6月7日,融创中国发布
-
2023-06-08 00:31:40
大盘弱势震荡不改 走势反复在所难免
金融投资网记者林珂快速回调后大盘继续震荡分化。沪指周三小幅高开后围
-
2023-06-08 00:25:11
主要矛盾和次要矛盾的方法论_主要矛盾和次要矛盾
想必现在有很多小伙伴对于主要矛盾和次要矛盾方面的知识都比较想要了解
-
2023-06-07 23:56:52
健之佳:王雁萍女士累计质押的公司股份数为129万股
健之佳(SH605266,收盘价:80元)6月7日晚间发布公告称,截至本公告日
-
2023-06-07 23:39:53
2023年6月7日广西铁矿石(巴)价格最新行情预测 天天播资讯
中国报告大厅2023年6月7日广西铁矿石(巴)价格最新走势监测显示:防城港
-
2023-06-07 23:26:20
最早江苏方言茉莉花原唱?
一、最早江苏方言茉莉花原唱?茉莉花是江苏民歌,是由何仿率领的合唱队
-
2023-06-07 23:27:59
传媒、软件、AI板块领涨!12股股价再创历史新高|世界今头条
人工智能、传媒娱乐、软件服务等板块表现较好,中国科传、中国出版等传
-
2023-06-07 23:19:23
【清一色午报】三大股指涨跌不一,宁德时代跌超5%,AI概念股再迎集体反弹|全球观察
①宁德时代跌超5%,在其拖累下创业板续创年内新低;②两市共38只个股涨
-
2023-06-07 23:06:25
【活跃度】6月7日商品期货活跃度排行榜:原油、菜油、橡胶位列前三 环球聚看点
6月7日,商品期货活跃度排行榜(TOP10)出炉:品种名称成交量持仓量活
-
2023-06-07 22:22:04
微速讯:【收评】豆油日内上涨0.03% 机构称油脂反弹乏力
行情表现6月7日收盘价当日涨跌幅五日涨跌幅豆油7016 00元 吨0 03%3 48%
-
2023-06-07 21:57:57
中国科学家领衔国际团队发现第一代超大质量恒星化学遗迹 环球观天下
中新网北京6月7日电(记者 孙自法)宇宙中第一代恒星质量有多大?理论预
-
2023-06-07 21:42:12
传媒、软件、AI板块领涨!12股股价再创历史新高 世界看热讯
人工智能、传媒娱乐、软件服务等板块表现较好,中国科传、中国出版等传
-
2023-06-07 21:24:51
经典互联网是否仍然重要? 热门看点
日前,互联网协会进行了一项小型研究,探索互联网边缘的发展和创新,重
-
2023-06-07 21:08:14
天天热讯:税收红利精准直达 经营主体减压力强信心
今年以来,为推动政策红利精准高效直达经营主体,税务部门既加力政策解
-
2023-06-07 20:25:09
泰安市立医院开展全国“爱眼日”宣传教育周系列活动 世界新要闻
通讯员孙鲁腾李元鹏在第28个全国“爱眼日”到来之际,为进一步普及广大
-
2023-06-07 20:30:02
注意!概伦电子将于6月28日召开股东大会
概伦电子(SH688206,收盘价:29 61元)6月7日发布公告称,2023年6月28
-
2023-06-07 20:28:34
荷兰警方在泽兰省截获多批可卡因 天天滚动
同时,荷兰海关发布消息称,荷兰海关在警方的帮助下在泽兰省弗利辛恩港
-
2023-06-07 19:54:31
梅园好时光
仲夏时节,江西省上饶市万年县湖云乡邱家村农民杨梅园又迎来了“梅”好
-
2023-06-07 19:49:14
世界热点评!30年“老药”安必速在华上市,能否解决全球近三成致死率的“侵袭性真菌”难题?
30年“老药”安必速在华上市,能否解决全球近三成致死率的“侵袭性真菌
-
2023-06-07 19:24:27
环球今热点:中交地产:关联方中交一公局集团2.5亿元中标中央公园项目
观点网讯:6月7日,中交地产股份有限公司发布了关于子公司因公开招标形
-
2023-06-07 19:25:48
焦点热门:华塑科技06月07日主力资金大幅流出
华塑科技06月07日主力资金净流出1627 59万元,涨跌幅为-4 87%,主力净
-
2023-06-07 18:57:02
全球快消息!杰创智能:公司主营业务暂未直接涉及电子身份证领域
每经AI快讯,有投资者在投资者互动平台提问:董秘你好!公司有无电子身
-
2023-06-07 18:52:31
骁龙8gen2VS骁龙8gen1plus:谁更强?数据揭秘!|全球动态
近年来,高通骁龙8系列处理器备受手机厂商青睐。而骁龙8gen2和骁龙8gen