您的位置:首页 >资讯 >

焦点信息:GaussDB(DWS)查询过滤器原理与应用

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

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

标签:

相关阅读

天天头条:【关注】2023遵义房博会全面启动

当前热门:上海市购房积分怎么查_上海购房积分哪里查

环球速看:中海宏洋成功发行业内首单碳中和绿色公司债 规模5亿元

临高金牌港开发区:助园区企业找销路 招商又扶商-天天观热点

当前时讯:丰原药业:公司没有治疗猴痘病毒的药品

青岛双星:公司控股股东双星集团混改项目已于2020年7月与相关方成功签约_环球热讯

宜宾学院召开中层领导干部经济责任审计进点见面会-世界热议

登康口腔: 关于召开2022年年度股东大会通知的更正公告

国民IP衍生作《仙剑客栈2》蒸汽平台现已正式上线-天天快讯

街头霸王6幸会怎么解锁

最划算的csgo租饰品开宝箱网站有哪些? 靠谱的csgo开箱网站推荐

柏乐园一日游作文600字 天天关注

街头霸王6旅途的终点怎么解锁-每日精选

世界微资讯!街头霸王6独行不如众乐怎么解锁

当前头条:吉视传媒:公司目前没有发展和推动有esim卡业务

高人气传奇私服手机版推荐 十大传奇私服手游版本合集

最火的打金版传奇手游推荐 十大打金版传奇手游合集

像素策略卡牌回合制roguelike游戏《将军 对决》6月27日EA发售 支持中文

csgo开箱能用steam吗怎么用 怎么使用csgo帧数显示指令?

最新:街头霸王6屏幕担当怎么解锁

CSGO最良心的开箱平台有哪些 CSGO准星调整类指令是什么?

csgo免费开挂软件是真的假的 最正规的csgo交易平台推荐

恐游合集《C.H.A.I.N.G.E.D.》免费发布 40部各类型收入 全球新资讯

csgo国内免费开箱平台哪个划算 csgo枪口抖动消除指令是什么?

《原神》公布「神工天巧·宝录之章」活动玩法介绍 奇妙的秘境挑战

世界焦点!《街头霸王6》玩家ID因涉及歧视黑人 受到200年账号封禁处罚

csgo开箱最便宜的软件有哪些 csgo空格大跳指令是什么?

通用织物阻燃剂商品报价动态(2023-06-07)

塞尔达传说王国之泪游隼弓在哪里|热点在线

塞尔达传说王国之泪格鲁德之弓在哪里 世界通讯

天天视讯!索尼宣布旗下高端游戏外设INZONE将与电竞战队Fnatic合作

全球热推荐:csgo国内免费开箱平台有哪些 2023最新CSGO白嫖平台分享

暗黑4安魂威能介绍

环球速递!GBA稀有卡带载入游戏史册:澳洲独占血糖检测仪

《街头霸王6》玩家ID因为歧视黑人 账号被封200年-世界报资讯

CSGO比较好的开箱网站有哪些? CSGO跳投指令介绍

《CS2》测试版更新 没使用武器现在可以退款了-播资讯

今日关注:塞尔达传说王国之泪尖刺波克弓在哪里

十大热门传奇私服手游合集 最火的传奇私服手游推荐_全球热消息

每日速讯:暗黑4PVP玩法有什么特点

csgo特殊饰品交易平台有没有 csgo清除血迹指令是什么?

报道:《地下城堡3》1.5周年庆送百抽,兔女郎、天使新娘任你选择!

csgo钥匙购买平台是真的吗 csgo怎么加别人主机?

环球百事通!《零纪元》领主首杀现已统统拿下,英雄无畏,传说现世!

高人气打金传奇手游推荐 适合散人的打金版传奇手游大全

Astrolabe Games参加7月京都BitSummit 作为金牌赞助商

再次读一本书之后的感触作文(再次读一本书之后的感触) 独家焦点

csgo饰品交易平台新手哪个好 csgo怎么赠送好友皮肤?

十大复古传奇手游排行榜 热门复古传奇手游合集-世界热点评

最新csgo饰品交易平台有哪些 csgo军备竞赛模式是什么?

shine过去分词和现在分词(shine过去式和过去分词的区别) 世界视讯

简单的科技小制作_有什么方法 焦点观察

csgo免费开箱平台可信吗? csgo购买武器技巧分享

2023国内csgo饰品交易平台怎么样 csgo常用技巧有哪些?

塞尔达传说王国之泪左纳尼乌姆之枪在哪里

天天热点评!十大热门复古传奇手游合集 最新复古传奇手游排行榜

《失忆症:地堡》发售 Steam综合评价“特别好评“_世界简讯

广东移动全球通“谁是冠军”掼蛋精英赛总决赛圆满收官!

塞尔达传说王国之泪左纳尼乌姆之刚枪在哪里

2023完美csgo饰品交易平台安全吗 csso暗影双匕为什么便宜?

每日信息:桌游RPG《艾尔登法环TRPG》6月20日发售 售价5500日元

天天新消息丨关卡编辑器 《原神》「神工天巧·宝录之章」玩法介绍

《暗黑破坏神IV》现已发布,支持DLSS 3;《瑞奇与叮当:时空跳转》即将发布,支持DLSS 3

十大复古打金传奇手游合集 最火的复古打金传奇手游推荐|世界报道

复古传奇手游十大排行榜 最火的复古传奇手游合集|全球观焦点

最靠谱的CSGO免费开箱网站有哪些 CSGOak47压枪怎么压枪?

CAPCOM格斗《街霸6》荣获Fami通40分满分游戏评价

国外CSGO免费开箱网有哪些 怎么使用CSGO帧数显示指令?

看热讯:暗黑4迅血威能介绍

环球新消息丨Steam综合评价“特别好评“ 《失忆症:地堡》已在昨日发售!

塞尔达传说王国之泪结实长棒在哪里_焦点速递

横板手游《洛克人X Dive》将于9月27日结束服务 全球热门

暗黑4涌能鲜血之威能介绍

《节奏剧场 Final Bar Line》时空之轮第2弹DLC曲目试听

国外好用安全的CSGO开箱网站是什么 CSGO怎么打暂停?

2023CSGO模拟开箱是真的吗? 可靠的国内开箱网站推荐

建设银行龙鼎金条价格今天多少一克(2023年06月07日)

csgo哪个免费开箱网最便宜 csgo准星调整类指令有哪些?

csgo开箱网站哪个便宜 csgo枪口抖动消除指令是什么?

协同发展交通为先

《原始传奇》六月限时活动开启,幸运转盘抽取屠龙宝箱!_焦点

世界微资讯!荣耀90系列2499元起开售 零风险调光护眼屏再造“档位爆品”

全球微资讯!新开复古传奇手游合集 十大热门复古传奇手游排行榜

5G网没啥用?工信部|世界快播

【世界报资讯】经纬股份:6月6日融资买入999.55万元,融资融券余额3536.12万元

颧弓内推后遗症会牙疼吗_颧弓内推后遗症-今日热闻

涛涛车业:6月6日融资买入523.15万元,融资融券余额4265.74万元 天天最新

cs免费开箱网有哪些 cs免费开箱网排行榜-环球微速讯

卡普空Steam开启40周年特卖 持续到6月21日

港服PS商店支付宝预购《最终幻想16》可获DLC奖励-世界时快讯

暗黑4枯萎威能介绍|天天时快讯

丐帮镇派之技!《问道》打狗棒法技能学习攻略

关注:索尼宣布游戏外设INZONE将与电竞战队Fnatic合作

天天微头条丨相逢夏月满 《幻塔》手游3.1版本今日上线!

环球快讯:类似181csgo开箱网有哪些 有没有类似181skins开箱网

暗黑4酷刑之威能介绍-每日热门

全球头条:《变形金刚:超能勇士崛起》发布新预告 6月9日为全年龄层观众再筑梦

【新视野】手机cs免费开箱网是哪个 2023cs免费开箱网大全

【新要闻】《寂静岭2重制版》PC配置公开 最低配置i5-8400+GTX 1080

cs免费开箱网在哪里 国内最大cs免费开箱网排行

精英悬赏仙境漫游CSOL全新超凡美少女来袭 焦点速看

【全球热闻】《光环:无限》发布新生涯军衔系统 将于6月20日上线

世界今头条!《漫威蜘蛛侠2》官方表示将在信心十足时公布发售日期

【世界播资讯】暗黑4野外刷宝玩法有什么特点

卡普空公布游戏白金销量更新榜单 《怪物猎人:崛起》总销量达1270万套_全球新资讯

暗黑4血脉掌握之威能介绍|环球热闻

《光环:无限》新生涯军衔系统 本月随第4赛季上线-天天速读

V社承认下架海豚模拟器 并表示无权评判不想掺和|全球即时看