GaussDB(DWS)查询过滤器原理与应用
2023-06-08 07:41:43 来源:博客园
摘要: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就不相同。

将作业加入黑名单主要有以下两种方式:

作业执行前判断作业是否在黑名单中,如果作业在黑名单中,拒绝作业执行,直接报错退出。

作业被拒绝执行后,对作业加入黑名单原因进行分析,问题解决后调用内置函数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”异常规则,作业触发异常规则后资源管理对作业进行以下处理:

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)查询过滤器原理与应用

2023-06-08

消费警示:警惕培训班退费骗局

2023-06-08

全球热议:硬核科技论 | 高通8295:算力暴涨8倍可带11块屏/真不是“马甲”

2023-06-08

电动焦虑下的日系车企:丰田反击,日产提速,本田激进

2023-06-08

克明食品:子公司5月生猪销售收入同比增38.4%-焦点速递

2023-06-08

兴华消费精选6个月持有期混合增聘崔涛 冷文鹏离任 焦点快播

2023-06-08

天融信(002212):6月7日北向资金增持16.65万股

2023-06-08

沙特额外减产无法盖过需求忧虑!国际油价延续跌势

2023-06-08

天士力:安体威颗粒获药物临床试验批准通知书

2023-06-08

纵穿天山 G577线精河至伊宁公路建设全面提速_世界速看

2023-06-08

世界看点:景德镇一餐饮店发生爆炸,官方回应:事故正在处理中

2023-06-08

腾讯QQ回应“QQ空间新版太难用”-焦点资讯

2023-06-08

吉视传媒:公司目前没有建立财务共享中心|焦点热文

2023-06-08

硬核科技论 | 自动报废、无人机探测、弹射座椅 这些汽车专利泰裤辣!

2023-06-08

即将发布全球车型,哪吒汽车参加9月慕尼黑车展

2023-06-08

无礼之徒_无礼 全球观察

2023-06-08

世界消息!城市传媒:公司和上海爱美联合出品电影《好像也没那么热血沸腾》

2023-06-08

澳第一大行澳大利亚联邦银行禁止员工使用ChatGPT 采用自有AI系统 前沿热点

2023-06-08

外交部:海洋是全世界的公共财产 不是日本的“下水道” 世界球精选

2023-06-08

智也升级更名为生活 增加了更多新功能! 全球速读

2023-06-08

一小时5.6元 国内共享单车悄然涨价-今亮点

2023-06-08

全球快资讯:以税为“笔”绘就乡村振兴美好新蓝图

2023-06-08

重庆水投集团再增持3574万股 成重庆银行第四大股东|每日焦点

2023-06-07

潍坊运动员张冬冲击奥运 天天热点

2023-06-07

WhatsApp使用“故事”来缓解用户的隐私担忧

2023-06-07

天津大学浙江研究院石英晶体微天平分析仪中标结果公告-全球视点

2023-06-07

广东2023年夏季高考首场考试顺利进行,70万考生奔赴考场_天天快讯

2023-06-07

环球快报:兆龙互连06月07日大涨,股价创历史新高

2023-06-07

梦到着火是什么预兆_梦到着火 全球热推荐

2023-06-07

全球最新:中洪关系实现“开门红”

2023-06-07

9的倍数的特征是什么_9的倍数 焦点滚动

2023-06-07

横州市气象台发布暴雨橙色预警信号【II级/严重】【2023-06-07】 世界今亮点

2023-06-07

@所有人 一起为每一位考生送上祝福!

2023-06-07

方大炭素(600516)6月7日主力资金净卖出918.55万元_全球速看

2023-06-07

硬汉灵魂没有了?采用潮流设计风格,依维柯聚星受到网友吐槽-全球通讯

2023-06-07

德媒:欧盟长期财政预算压力不断增加 难应对新挑战 天天快播报

2023-06-07

一动感舞曲_动感舞曲大全

2023-06-07

丰林集团: 公司按要求定期披露股东户数,敬请留意定期报告相关内容

2023-06-07

《海南往事》第十八期:这栋带有金色字匾的骑楼,你知道它的故事吗?-视讯

2023-06-07

于新赛道“疾驰” 上海加速打造国际一流元宇宙产业_每日时讯

2023-06-07

市城综局巡查清理市政措施保畅通

2023-06-07

华阳股份(600348)6月7日主力资金净卖出2049.90万元_焦点滚动

2023-06-07

【全球播资讯】名师点评海南高考作文:降低审题难度 让考生有话说

2023-06-07

上海市纪委监委通报4起群众身边的腐败问题-每日观点

2023-06-07

“大坝被炸”后,拜登发声:我们将继续援助乌克兰

2023-06-07

个人形象的提升_个人形象包括哪些方面 如何提高个人形象-世界新视野

2023-06-07

焦点速看:百度发布2022年ESG报告:AI构建安全生态,拦截恶意网站778亿次

2023-06-07

爱司凯:公司近三年(2020年至2022年)未进行利润分配|天天微速讯

2023-06-07

广西:劳模工匠进校园 匠心引领树榜样

2023-06-07

南京:集中带量采购价惠质优效率高

2023-06-07

全球热门:银行信用卡分期利息是多少?分期可以提前还款吗

2023-06-07

当前热文:入职天数计算公式表(入职天数计算公式)

2023-06-07

表格中统计名字个数怎么操作(表格中统计名字个数)_环球今日报

2023-06-07

又搞抬价!29队NBA老板在哭泣

2023-06-07

14个省份采用新高考模式!|全球热门

2023-06-07

达州供电斌郎供电所“电力通”站岗 为基层清廉“放哨”

2023-06-07

观热点:北京城区供水已超去年最高日供水量

2023-06-07

360离婚案进展:周鸿祎完成4.47亿股份转让-全球观速讯

2023-06-07

天天热议:安德烈亚斯·托希尔德森

2023-06-07

綦江:新阶人士“爱心送考”为梦护航

2023-06-07

当前短讯!奚梦瑶港大上课被拍,生俩娃依旧超瘦,网友:这小腿比我手腕都细

2023-06-07

今亮点!腰椎弯曲怎么锻炼方法_腰椎曲度变直锻炼方法

2023-06-07

吃土是什么意思网络语_以后只能吃土了啥意思

2023-06-07

探案说法|环保设施未验先投,海南一公司被罚21万元

2023-06-07

观天下!2018lol洲际赛决赛第五场_2018LOL洲际赛赛程公布 7月5日 8日洲际赛赛程

2023-06-07

今头条!带状疱疹后遗症神经痛治疗_战争后遗症是什么意思该怎么治疗

2023-06-07

欧元区4月PPI超预期降温 市场押注欧央行6月继续加息 环球即时

2023-06-07

每日消息!国家二类医疗器械查询_国家二类医疗器械

2023-06-07

我愿意孙红雷在线-我愿意 孙红雷 热点评

2023-06-07

夹棍是什么意思?_夹棍脚丫上刑视频 最新资讯

2023-06-07

环球微资讯!梦见猪是什么预兆周公解梦_梦见猪

2023-06-07

2023成都天府新区高考限行措施 热消息

2023-06-07

武汉苏泊尔炊具有限公司联系电话_武汉苏泊尔炊具有限公司 全球新消息

2023-06-07

龙岩学院什么专业最好排名里面有-全球即时

2023-06-07

求好看的美国电影_是关于生化的僵尸

2023-06-07

辅酶q10的作用与功效备孕_辅酶q10的作用-天天精选

2023-06-07

夜盘主力合约收盘截至2:30收盘,沪金主力合约收涨0.57%,报452元/克,沪银主力合约收涨0.35%,报5512元/千克,SC原油主力合约收跌0.44%,报526元/桶

2023-06-07

焦点热文:我办婚礼

2023-06-07

开普检测: 第二届董事会第十九次会议决议公告

2023-06-07

crazygames游戏_like crazy_全球讯息

2023-06-07

环球精选!神农集团:5月生猪销售收入1.76亿元

2023-06-07

每日看点!什么玉最好排行榜_什么玉最好

2023-06-06

环球快消息!詹宁斯谈皮蓬:前妻和乔丹之子在一起 那是压垮他的最后一根稻草

2023-06-06

天亿马(301178.SZ)股东南京乐遂累计减持25.53万股

2023-06-06

新资讯:稳中向好 加快复苏——山东经济一线观察

2023-06-06

天天讯息:苹果与迪士尼合作,双方合作共同构建头显内容

2023-06-06

世界视讯!【原】谁说鲫鱼跟酒米是绝配?夏季这样选窝料,诱鱼快留鱼久中鱼率更高

2023-06-06

铭普光磁4涨停

2023-06-06

医保卡里的钱可以取出来吗 每年交350医保卡里有钱吗?_天天新消息

2023-06-06

芒种至,仲夏始,播种健康做好“5件事”_每日看点

2023-06-06

今日快看!鸡胸肉的做法大全家常_高瓜的做法大全

2023-06-06

众泰汽车: 公司关于延期回复深圳证券交易所《关于众泰汽车股份有限公司申请向特定对象发行股票的第二轮审核问询函》的公告

2023-06-06

造梦西游破解版4_造梦西游破解版

2023-06-06

智能自控:接受信达证券调研_今日视点

2023-06-06

当前热文:南新制药:产品取得注册证 产品名称为“磷酸奥司他韦干混悬剂”

2023-06-06

天天观热点:远东股份:远东控股及其一致行动人累计质押股份数量(含本次)约为8.44亿股

2023-06-06

飒!舞剧《咏春》燃爆全场

2023-06-06

22.75天工资计算公式_21 75天工资计算公式 焦点热门

2023-06-06

信维通信:无线充电Qi 2.0标准应用 对公司有积极影响

2023-06-06

超图软件6月6日盘中涨幅达5%|天天热议

2023-06-06