当前信息:GaussDB(DWS)查询过滤器原理与应用
2023-06-08 03:16:40 来源: 博客园
摘要: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)
点击关注,第一时间了解华为云新鲜技术~
标签:
为您推荐
精彩放送
热门文章
-
三安光电:子公司与意法半导体设立合资公司 从事碳化硅外延、芯片生产 世界头条
-
中央气象台:基于人工智能的台风监测预报系统初步建成
-
新资讯:腾讯控股:斥资4.01亿港元回购119万股
-
沪硅产业:国家集成电路产业投资基金股份有限公司拟减持不超过3% 环球快资讯
-
*ST腾信:公司股票进入退市整理期的起始日为2023年6月15日
-
世界快消息!东方材料:TDTECH公司章程中约定了股东的优先受让权条款
-
*ST紫晶:公司股票预计最后交易日期为6月30日
-
星环科技:拟定增募资不超过15.2亿元 用于数据分析大模型建设等项目
-
每日快报!北京君正:子公司拟共同投资设立产业基金
-
黑猫股份:部分董事及高管计划减持公司股份不超过627500股 |环球速递
-
鸿博股份:截至目前北京AI创新赋能中心项目已投入实际运营 相关产品与服务处于业务推广阶段 -今日报
-
每日热文:奥飞数据:拟4000万元参与投资产业投资基金
精彩图片
-
成本大减!新一轮的旗舰大战也将在即将到来的9月正式拉开帷幕
-
博览会开幕 中国首款具有自主知识产权的国产通用型科学计算软件正式发布
-
技术下降!Intel独立显卡驱动一次评测就发现43个Bug
-
高性能的台式机彻底告别“光污染” 雷克沙推出简洁纯白外观设计
-
韩国媒体率先报道:三星电子236层NAND闪存预计年内开始生产 市场竞争更激烈
-
新科技!苹果正在积极研发某种形式的AR/VR头显或智能眼镜
-
谷歌测试开展新功能 向用户展示哪些云流媒体服务拥有特定的视频游戏
-
支付宝积极响应国家为小微降费的政策号召 一年降费让利近80亿
-
京东汽车就与浦林成山旗下新能源车轮胎品牌浦林达成战略合作 助力轮胎“电动化转型”
-
苹果新专利公布:暗示未来 iPhone手机或许有陶瓷材质版
-
盖茨和韩国能源供应商SK共同牵头 其中SK投资2.5亿美元
-
海底捞早已经捞不动了 据统计上半年最高亏损达2.97亿
热文
-
微头条丨23安徽债62今日发布发行公告
-
Molecular Therapy Nucleic Acids:STAT3适配体小核酸药物阻碍非小细胞肺癌细胞和肿瘤相关成纤维细胞之间的串扰-焦点热讯
-
国际航班有序恢复,北京边检12367日均接听大涨3倍_当前滚动
-
【环球新视野】到“十四五”末,山东全省将培育建设工匠不少于1万名
-
世界要闻:下列项目中什么称为普通年金_下列项目中哪个属于普通年金终值系数_
-
杭州庆春广场地下商业二次流拍,降价3.2亿无人问津-讯息
-
环球热门:国信证券:互联网行业一季度利润普遍亮眼 预计二季度在低基数下增速更高
-
助学金申请理由简短1 助学金申请理由简短
-
天天微资讯!郭广昌要卖德邦证券?近两年净亏近5个亿
-
全球热点评!酷狗直播帐号被封的处理教程讲解
-
华为云张平安:聚焦技术突破,坚定战略投入GaussDB_视点
-
孙子兵法中为上兵的手段是什么?_在孙子兵法中为上兵的手段是什么
-
新时代“新农人” 绘出乡村美好蓝图
-
全球热门:中国5月外汇储备31765.1亿美元 连续第7个月增加黄金储备
-
天天头条:禁毒宣传进校园:远离毒品,让青春充满阳光
-
加码自救!千亿地产紧急出招 八天大涨近40%重回1元上方 当前快报
-
全球信息:4个工作日,北京大兴发出首张“一业一证”行业综合许可凭证
-
世界即时:生活正确_关于生活正确介绍
-
小摩增持药明康德(02359)约27.75万股 每股作价约66.87港元
-
东方电气国内单机容量最大冲击式水电机组完成国产化改造
-
梅园好时光
-
【世界聚看点】清空地址栏还能找回吗(清理地址栏)
-
全球热讯:彬州:又到樱桃正红时
-
泊姓氏_泊姓 当前关注
-
钠是什么盐吗_钠是什么|资讯推荐
-
刻法人章需要什么资料|当前观点
-
每次吃完火锅就会拉肚子_每次吃完火锅就拉肚子怎么办|天天观焦点
-
excel链接其他表格的数据_excel表格链接另外一个表格的数据 世界最资讯
-
暖心高考|今年广西首次使用“智能安检门”
-
pdf转换word排版变乱_pdf转换成word后如何排版
-
当前报道:联盟
-
护航夺魁之路!中建二局华南公司爱心助考在行动
-
雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警
-
汽车芯片「 舆芯半导体」完成近亿元天使轮融资,临芯资本领投
-
新旧动能顺畅切换,中德企业探索可持续发展合作 资讯推荐
-
32辆电动车实测:特斯拉Model S跑最远 小鹏G9反向虚标最多-世界热议
-
今天高考返程和赴考时段广州有雷阵雨
-
环球即时看!申万宏源:首予洲际船务(02409)“买入”评级 三大业务板块营收持续增长
-
悦达起亚入选“私家车新车上牌免查验试点企业”_当前信息
-
那些年,我们参加过的高考|上海会客厅
-
长安汽车回应网传克扣10%货款:不实,已报案
-
按照评价的不同目的可将课程评价分为
-
亚航低成本航空复苏有道
-
当前观点:【文明在遵义】播州区:打造15分钟便民服务圈 让幸福生活“触手可及”!
-
主要矛盾和次要矛盾的方法论_主要矛盾和次要矛盾 全球今亮点
-
股票不能当天买入当天卖出吗
-
前沿热点:全力推进建设进度!渝昆高铁川渝段7标隧道整体掘进即将过半
-
【世界独家】连发预警!下班早回家!南部近海可能出现龙卷风
-
马斯克卸任 推特女掌门正式接棒-世界看点
-
*ST金山(600396)6月7日主力资金净买入339.20万元_全球视讯