首页>资讯 > 图片资讯 > 正文

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

来源:博客园    2023-06-08 03:04:12

摘要: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)

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

关键词:

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

摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔

上海市纪委监委通报4起群众身边的腐败问题_天天日报

群众身边的腐败和作风问题,直接损害群众切身利益,严重败坏社会风气,

@ 全国游客,贵州国有A级景区门票五折优惠

6月7日,第十九届中国(深圳)国际文化产业博览交易会开幕,贵州发布20

招商体育文化休闲股票A重仓股视觉中国涨6.37%_天天滚动

6月7日收盘,视觉中国涨6 37%,报收18 69元,换手率13 1,成交量8809 0

兴齐眼药受邀参加2023人民健康大会·国民视觉健康论坛 天天讯息

由人民网主办的“2023人民健康大会·国民视觉健康论坛”于6月6日在人民

江苏银行App是否更专业?搜索互动仍有不足,部分功能尚待优化_视点

新浪金融评测室综合用户体验、功能服务、性能安全、发展创新4大维度,2

【世界新视野】对供应商货款扣款10%? 长安汽车回应:内容不实,已报案

新京报贝壳财经讯(记者白昊天)6月7日,长安汽车针对网传《致长安汽车

一般纳税人房屋出租简易征收税率(房屋租赁税率11 简易征收5) 天天热点

1、简易征税应注意增值税征收率统一调整为3%。2、至此,大家不再为五花

初中女厕精品视频网站(0女厕大小便)

1、阴部。2、出尿的地方叫尿道。本文就为大家分享到这里,希望看了会喜

下属公司累计被冻结5个银行账户,海南椰岛今日股价开盘即下跌 当前聚焦

下属公司累计被冻结5个银行账户,海南椰岛今日股价开盘即下跌,股价,酒

(港澳台)多项数据显示台湾经济成长压力仍在|世界今亮点

(港澳台)多项数据显示台湾经济成长压力仍在,台湾,成长,台北,制造业,

让老小区焕发新生,“三驾马车”齐发力|共建美丽家园 共享美好生活 环球时快讯

让老小区焕发新生,“三驾马车”齐发力|共建美丽家园共享美好生活,平

第124章睛姨梅开二度梅姨_梅开二度的由来 热点评

想必现在有很多小伙伴对于梅开二度的由来方面的知识都比较想要了解,那

每日时讯!农历壬申年是哪一年_壬申年是哪一年

想必现在有很多小伙伴对于壬申年是哪一年方面的知识都比较想要了解,那

每日热门:圣安地列斯ios版快用苹果助手_快用苹果助手

1、“快用苹果助手”是国内首款支持苹果IOS应用一键下载、安装的PC端辅

德云社门票在哪买_德云社在哪个城市

想必现在有很多小伙伴对于德云社在哪个城市方面的知识都比较想要了解,

汽车报道:处理自动驾驶数据宝马集团成立新部门

了解汽车资讯,掌握汽车知识,所以大家有空还是需要多看看汽车方面的信

构建人类命运共同体的原因是什么_构建人类命运共同体的原因

想必现在有很多小伙伴对于构建人类命运共同体的原因方面的知识都比较想

武汉数字经济总量占全市GDP超四成 每日精选

武汉数字经济总量占全市GDP超四成,机房,武汉市,人工智能,计算中心

全球热点!一个没有财富效应的股市,一定不是一个健康的股市

一个没有财富效应的股市,一定不是一个健康的股市,投资理财

新巨丰拟收购纷美包装股权,深交所下发重组问询函

新巨丰拟收购纷美包装股权,深交所下发重组问询函,股权,新巨丰,上市公

深南电A:下属南山热电厂已进行虚拟电厂备案,暂未实质性运行

深南电A:下属南山热电厂已进行虚拟电厂备案,暂未实质性运行,光伏,储

华为李捷:创新引领,持续夯实5G高质量网络

中国5G千兆网建设正在引领全球,面向未来长远发展,华为将从创新、绿色

全球热点!顶象发布《车企App安全研究白皮书》,剖析品牌汽车App的两大类风险

![图片](https: mmbiz qpic cn mmbiz_gif Qk5wiatq1gWMXM8AD19laQkHjA

王力宏败诉!李靓蕾宣布胜诉,王力宏恐失去巨额财产和孩子抚养权-焦点报道

李靓蕾还表示如果女孩子们受伤了,有需要帮忙的都可以联系她,他愿意帮

观焦点:华商基金看行业之人工智能:为什么中长期要关注“卖铲子的人”

伴随ChatGPT在多场景的广泛深入地应用,人工智能的想象空间得到显著放

环球最新:神仙级避暑线路分享这次宁波上大分

神仙级避暑线路分享这次宁波上大分,瀑布,栈道,秀丽,宁波,四明湖,雪窦山

黑龙江省气象台发布龙卷预警_全球动态

黑龙江省气象台2023年6月7日14时20分发布龙卷预警:预计未来2小时,铁

江苏出台14条措施推动外贸稳规模优结构|前沿热点

江苏省商务厅副厅长周晓阳在发布会上表示,下一步,江苏将从大力支持企

乌鲁木齐高新投资集团5亿公司债已全部回售

债券简称“20乌高新MTN002”,发行总额5亿元,票面利率为3 75%,付息日

综合资讯

+更多

热点资讯

+更多
股票账户的钱会不会突然消失?股票钱什么时候能转出?
股票账户的钱会不会突然消失?股票账户钱不会无缘无故消失,股票账户钱其实是存在银行而非券商,银行肯定是正规的地方,只要存的钱在里面就 [详细]

Copyright @ 2008-2020  www.43710.com   All Right Reserved Powered by 财经情报网 版权所有

财经情报网   联系邮箱:562 66 29@qq.com

网站备案:沪ICP备2020036824号-12