您的位置:首页 >热点 >

GaussDB(DWS)查询过滤器原理与应用

2023-06-07 20:48:39    来源:博客园
摘要: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)

点击关注,第一时间了解华为云新鲜技术~

标签:

精彩放送

【多措并举确保粮食安全】亩产588.06公斤!我省旱地小麦单产再创新高

家里拆迁可以申请经适房吗? 拆迁户能申请经济适用房吗_天天讯息

颜值高还省油!新款捷豹 SUV 上市 同级唯一可选插混? 全球快资讯

连连看小游戏免费_连连看2 6|当前速读

奇瑞汽车六次上榜,“民族品牌”的排面从何而来?

国内多地县域充电桩安装量翻番 呈现哪些新趋势?

【环球报资讯】大学的数学专业有哪些科目考研究生要考

【天天报资讯】amd cpu怎么安装_cpu怎么安装

全球百事通!led灯是什么材料制成的

关注:山西移动网上营业厅_山西电信网上营业厅官网

招商银行临时额度到期(临时额度到期了是不是要全部归还)

全球微速讯:2023年深圳有多少个区_深圳有多少个区

热资讯!launcher_launch

2023年中国龙舟公开赛(湖北·荆州站)开赛 今日报

icloud下载照片是拍摄时间吗_icloud下载照片|天天报道

三角形底面积计算公式_三角形面积计算公式大全 全球讯息

当前看点!法线贴图原理_法线贴图

三七撞上二十一下载地址_三七撞上二十一下载_焦点精选

高盛:市场对美国通胀下降的速度预期太乐观了_每日快报

动态焦点:Redmi K60E送不送贴膜吗

焦点观察:0-3波兰队!中国女排无缘七连胜,分析有3大输球原因

5c 5s屏幕通用吗(5c 5s)

第一季度电力概念股每股收益排行榜一览

天天新资讯:国家防总对浙江等省份启动防汛四级应急响应

“家门口的便民集市”真暖心

杨颖,杨紫,王源,乐华,虞书欣

神农乡村生态环保(山西)有限公司在夏河开展投资考察活动 环球今日讯

即时焦点:文化石家庄——神秘中山国(上)

河南发布地质灾害黄色预警!这些地方有大到暴雨、局部大暴雨|天天热推荐

儿子被喂食大量安眠药,母亲和情夫当晚做肮脏之举,父亲死不瞑目

焦点快报!乡村之美丨浙南小渔村实现年游客量超八十万!秘诀是什么?

发射天宫2号的目的是什么意思_发射天宫2号的目的是什么 环球今日讯

环球新消息丨忻城税务:多措并举推动纳税缴费服务再升级

6:17:监管层释放重磅信号,A股牛蹄能否归来?

世界热推荐:山东艺术学院举行2023届毕业生毕业典礼暨学位授予仪式

原神苍漠囿土挑战方碑完成攻略

户枢不蠹流水不腐意思_户枢不蠹

水利部和中国气象局联合发布山洪灾害气象黄色预警

热消息:哈洽访谈|封昌红:为哈洽会插上创意设计的翅膀

洛雪音乐助手使用方法介绍

弗洛伊德死亡3年后,美国发布重磅报告揭种族歧视问题_天天看热讯

全球看热讯:龙韵股份(603729)6月1日股东户数0.91万户,较上期增加12.16%

2023年中国房企品牌排行TOP100

当前报道:原神:旅行者新皮肤又来了,新专武曝光?宵宫、甘雨皮肤超好看!

湖南开展专项整治行动保障农民工工资支付

牛皮沙发的种类_牛皮沙发的选购技巧是什么 每日看点

片碱的化学式怎么写(片碱的化学名称)|快资讯

环球微动态丨世界防治荒漠化与干旱日 | 防沙治沙的“中国智慧”

划龙舟看龙舟,五类安全提示莫疏忽!-焦点速读

世界球精选!三溪村夜赛龙舟盛大启幕!红花郎携手千年古邑共话经典与传承

qq.com_fcm qq com_世界新消息

当天成团/当天勘察/当月开工,昊铂发布超充到家“当日达”

2022年全国社会物流总额实现347.6万亿元!《中国商贸物流发展报告(2022年)》发布|今日关注

全球热门:空中俯瞰山水相融美如画 感受祖国大地夏日之美

沭阳县塘沟镇碾盘村:开展“阅汇四季”之阅读一“夏”主题活动

环球简讯:专家谈东西方文明互鉴:促进中外年轻人走进彼此生活

世界观天下!美国计划向乌克兰提供F-16战机 俄称已向美方发出外交照会

普拉提45分钟全套教程(普拉提)

智慧骨科机器人落户杭州医院 为患者提供更加安全、精准的医疗服务 环球看点

全球资讯:则Pixel手机应在重新启动时显示新的黑色启动动画

世界观察:卢大使卸任,临别赠言让欧洲如坐针毡!

欧吉桑和欧巴桑_欧吉桑

酒协公布!2023白酒圈“大洗牌”,五粮液王者归来,茅台地位不保 当前资讯

M5改装跑车驾驶好玩吗 M5改装跑车驾驶玩法简介_世界快播

哈尔滨站到太平机场大巴时刻表(哈尔滨火车站到机场大巴时刻表)

即时看!邮轮复航在即,准备好了吗?山东港口联合各方开展邮轮作业模拟通关演练

江西通报:是“老鼠类啮齿动物头部”

二战老照片完美上色:英勇的意大利游击队员 美军士兵鏖战硫磺岛

护航中考 浐灞公安推出多项暖心服务举措

李玉斌(关于李玉斌的简介) 全球聚看点

个人签名怎么写才霸气女_个人签名怎么写|环球热文

天天即时:拼多多百亿补贴618狂欢来袭 每人最高可领290元优惠券

美股异动|哈门那跌2% 2023财年每股收益指引低于预期 环球热点

天天日报丨世界主要国家海军一个航母打击群 通常由几艘各类舰艇编成 _360

重点聚焦!微信有人工客服吗在哪里(微信有人工客服吗)

市民体验大运会交通保障 设置大运会专用道 增加K6K7车次_天天热消息

空调什么牌子的好还便宜_空调什么牌子的好|热点评

属羊的是199几年出生的_属羊的是哪一年出生的简介介绍

世界观天下!非典型形态的危害食品安全犯罪

焦点速读:赛博仙侠外壳+传统文化底蕴,《梦幻新诛仙》新门派“泰裤辣”

金昌市首个邮银“乡村振兴金融工作室”挂牌成立-今日讯

关注:缺陷责任期与质量保修期的区别和判定_缺陷责任期与质量保修期的区别

河西区:发挥金融资源优势 助推实体经济发展

温暖的弦结局_温暖的弦大结局简介和详情介绍

电子数据取证可破解不法分子AI换脸术——对话中国科学院软件研究所研究员、博士生导师丁丽萍

天天讯息:6月20日,第十三届中俄文化大集在黑河开幕!大集活动剧透

观察:新华全媒+|探访高考评卷现场:各地严把评卷质量关

人有三把火什么意思?火灭了会死?-每日讯息

全球热头条丨记者观察 | 人民币汇率的韧性与弹性

全球看热讯:华润系入股金种子酒一年后:扭亏为重任、继续引进人才

马戴灞上秋居_灞上是什么意思 每日快播

英国央行6月料升息至4.75%,因通胀意外顽固-全球信息

热点!京津城际扩容 天津各站去往北京方向日均总运能增加超1.6万人次

盐城市优化金融服务激活实体动能

福建罗源:迎峰度夏 保障电煤供应|世界讯息

特斯拉FSD全面入华,谁松了一口气?

微资讯!南岭民爆:子公司中标47亿元工程项目

海口综保区金盘园区中央大道改造完工试通车

我在尼泊尔的街头用长焦镜头抓拍的照片 全球看点

采洽热烈人气旺