首页 > 资讯 >

GaussDB(DWS)查询过滤器原理与应用-当前要闻

2023-06-08 08:34:09 来源:博客园
摘要: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)

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

上一篇:

2023年上海中考加分照顾政策 哪些考生可以加分

下一篇:

最后一页

x
推荐阅读

GaussDB(DWS)查询过滤器原理与应用-当前要闻

2023年上海中考加分照顾政策 哪些考生可以加分

脚裂怎么办_三个偏方推荐

世界速看:【收评】棕榈油日内下跌0.31% 机构称油脂反弹乏力

百事通!美联储下周加息概率骤降 黄金期货弱势震荡

美元兑印度卢比汇率走势分析:印度央行利率决定临近 印度卢比跌至82.50下方

观热点:临川区气象台发布雷电黄色预警信号【III级/较重】【2023-06-07】

2023年法网:德约科维奇与阿尔卡拉斯会师男单半决赛-全球快播报

【收评】热卷日内下跌1.59% 近5日累计涨幅3.91%

高考首日,考生乘坐“爱心送考车”奔赴考场

重庆市第六次妇女代表大会举行 重庆爱尔梅红、黄韵梅受邀参会-环球热门

诊断证明怎么开图片(诊断证明怎么开)-前沿资讯

北辰区气象台发布雷雨大风蓝色预警/IV级/一般【2023-06-07】

头发留太长会和身体抢营养吗 7月17日蚂蚁庄园今日问答

2023高考数学开考 考生沉着进入考场

天天信息:东京股市明显回落

全球热文:阿瓦提县举办2023年“六五世界环境日”主题宣传活动

晨光新材股东户数下降1.39%,户均持股10.58万元

《山河令》制片人马韬去世 多位工作人员发文悼念

世界观察:男子醉驾去医院照顾住院老婆,结果途中发生交通事故

安全感满满!普陀的他们让“舌尖上的安全”有保障|今日讯

世界热讯:库克回应Vision Pro价格昂贵:这是“最先进的电子设备”

世界热头条丨2023北京市第十九中学中考招生计划公布

祝贺!甘肃中医药大学附属医院药学团队获得全省中药技能大赛团体一等奖

每日头条!伟思医疗:公司运动康复机器人产品线符合神经康复智能化、标准化的康复需求 属于国内领先水平

全球快资讯:天士力:安体威颗粒开展用于普通感冒(风寒证)的Ⅲ期临床试验获同意

【高端访谈】RCEP全面生效促进区域经济一体化——访日本贸易振兴机构成都代表处首席代表森永正裕

犬人文言文翻译_犬人文言文翻译及注释

刘国峰: “1528”4步搞定中级会计实务收入章节——8 世界速讯

南方观察 | 助力中国文化产业第一展,深圳出版集团以文化建设彰显深圳魅力 全球时讯

环球热点!5月中国外贸出口先行指数环比增长 预计6月将继续平稳回升

DRG/DIP概念走强 塞力医疗涨停 天天亮点

全球快看:再传集采消息 长春高新午后跌停 浙江省药械采购平台回应每经:5月31日确发过第四批药品集采文件

中石油下属公司领导与“小三”逛街后续:涉事人员胡继勇被免职并接受纪委核查

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

葛兰素史克(GSK.US)全球首款老年人RSV疫苗获欧盟委员会批准

克明食品:1-5月累计销售生猪24.01万头,同比增长78.20%|天天热消息

这场HOME+发布会后,美好生活的标准或将改变!? 每日时讯

【环球新要闻】和胜股份:在项目研发前沿领域一直与宁德时代深度合作

二阳状况出现新冠长期存在 连花清瘟适合家庭常备

每日快看:个人特点及特长500字(个人特点及特长)

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

阿斯顿·马丁DB12将6月12日国内首发

香港金管局:5月底外汇储备资产总额为4210亿美元|最新快讯

巴厘岛是哪个国家的位于哪个大洋_巴厘岛是哪个国家的

推动实现“家门口的幸福”!苏州相城黄桥街道聚力党建便民服务

狗宝的药用功效和作用_狗宝

欠款证明是否就等于欠条?|环球焦点

博学之审问之慎思之明辨之笃行之这句名言的意思是什么_博学之审问之慎思之明辨之笃行之全文

龟梨和也将主演三池崇史新片《怪物樵夫》 挑战“精神变态”律师二宫彰_今日视点