GaussDB(DWS)查询过滤器原理与应用
摘要: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)查询过滤器原理与应用
- 环球观天下!东丽区气象台发布雷雨大风蓝色预警/IV级/一般【2023-06-07】
- 热资讯!恒信东方涨20.00%
- 打造党建“新引擎”!宝山这个小区探索社区治理新路径
- 名师点评上海高考作文:题目平实大众化,要读出材料背后的语气态度
- 那些年,我们参加过的高考|上海会客厅
- 【天天聚看点】中信保诚基金:3200点,你可以更乐观一点
- 世界观天下!马不停蹄!考生不慎遗失身份证,武汉青山民警一天连帮3名考生
- 影视股大爆发!百亿龙头3天2板,“AI+IP”双概念催化,这些方向或有望升温 热点评
- 4个工作日,北京大兴发出首张“一业一证”行业综合许可凭证|世界热点评
- 全球热门:仅行驶30英里!难不成一直推着走?1990年雪佛兰Corvette ZR-1
- DRG/DIP概念走强 塞力医疗涨停_焦点精选
- 和胜股份:在项目研发前沿领域一直与宁德时代深度合作
- 当前讯息:注资5000万元!上海康恒劲旅环境服务有限公司成立!
- 世界即时:专访:中国为推动和平与共同繁荣发挥重要作用——访墨西哥参议长阿门塔
- 5月外汇储备降至31765亿美元 汇率折算或是主因
- 中泰证券:给予旭升集团买入评级
- OPPO Find X6外观怎么样?OPPO Find X6功能特点怎么样?
- 教育部:坚持师德违规“零容忍”
- 深高速董秘回复: 由于完成路费收入的数据拆分、确认需要履行一定的程序 今日视点
- 楚天高速董秘回复: 公司将立足智慧交通、智慧城市等应用场景,持续关注相关新兴技术 天天观速讯
- 吉视传媒董秘回复: 感谢关注公司。近几年受整体行业及资本市场影响,股价有所波动
- 传统村落消防安全有隐患 云南一镇政府被提起公益诉讼-每日资讯
- 亚通精工董秘回复: 公司汽车零部件业务主要是为整车厂提供冲压及焊接零部件,主要客户均为知名大型整车厂
- 天天消息!河南麦收进度过八成 夏播已播种近五成
- 外交部:希望欧盟和国际社会一道共同反对美国的经济胁迫_全球快报
- 重庆便宜的大专院校排名 重庆学校大专排名 世界热讯
- 《伪恋》漫画宣布重印 包含原作十年后日后谈 天天观热点
- 全球快报:猪头猪头焖子的做法_猪头焖子的做法
- 格力分体空调室内机漏水是什么原因_空调室内机漏水是什么原因
- 环球观点:深珠通道,有新动向!
- 学生体质健康网官网为什么打不开 全国学生体质健康网官网
- QQ音乐如何设置耳机音效?QQ音乐怎么设置智能分类?
- 环球热门:酒类分析师蔡学飞:中国酒,目有繁星,依然沐光而行
- 腾讯QQ回应“QQ空间新版太难用”
- 在线重装系统哪个软件好?cad2006激活码如何获取?
- 焦点热议:前4月广东自贸试验区进出口同比增长22.3%
- 优博讯:公司暂未与英伟达有直接合作_当前快讯
- 天津普林拟关联收购 被问高溢价是否损害上市公司利益 环球微速讯
- 全球新动态:优博讯:公司作为长期专注于AIDC领域的企业,一直致力于为行业客户提供AIDC全栈式解决方案
- 2023国内速冻食品产品类别及市场发展增速
- 环球速读:华测检测:公司的经营情况良好 一季度营业收入和归母净利润均实现稳定增长
- 通讯!土耳其里拉持续贬值 再创历史新低
- 商务预报:5月29日至6月4日禽产品零售价格小幅下降-焦点简讯
- 加码自救!千亿地产紧急出招 八天大涨近40%重回1元上方 实时
- 永泰能源:公司无形资产主要为矿业权资产,为公司开展主营业务和增强发展后劲而配置相关资源 环球快讯
- 理想汽车北京顺义工厂最早7月投产?官方回应:确实在积极准备中
- flash动画怎么导出mp4格式?flash动画怎么旋转?
- 网易MuMu模拟器怎么运行磁盘清理?网易MuMu模拟器如何关闭帧率显示?
- 四川个人停息挂账后果有哪些?停息挂账会影响孩子吗?
- 中消协提示警惕培训班退费骗局
- 环球观察:朋友圈非常经典的人生格言
- 信用卡即将逾期停息挂账好吗?信用卡停息挂账如何处理?
- 江苏企业停息挂账有哪几种方式?信用卡逾期了还能公积金贷款吗?
- 网约车交通事故侵权责任的规定是什么?侵权责任的承担方式是什么?
- 信用卡办理了停息挂账怎么买车?停息挂账是硬性规定吗?
- 实时:商品期货收盘多数下跌,甲醇跌3%,纸浆、尿素、纯碱跌超2%
- 申购费率什么意思_什么是基金申购费率
- 车辆玻璃怎么识别是几几年生产的 _防爆轮胎和普通轮胎有什么区别_每日快播
- 【独家】一视同仁的近义词_一视同仁的意思
- “饺子宴”托起老区留守老人的幸福
- 【全球新视野】悦达起亚入选“私家车新车上牌免查验试点企业”
- 微博设置屏蔽陌生人私信的操作流程
- 高考首日 各方联动护航高考
- 全球热讯:汽车报道:处理自动驾驶数据宝马集团成立新部门
- 商务部副部长凌激:欢迎赛诺菲集团继续深耕中国市场 积极参加进博会
- 5月北京新房市场量降价涨 11家房企单月销售额超10亿
- 股东转让股权要交什么税?股权变更代办费用多少?
- 驾驶拖审车辆怎么处罚?没年检的车上路发生交通事故怎么处理?
- 天天速讯:四边形有哪几种它们各有什么特征_四边形有哪几种
- RX6800显卡价格迎来新低了吗?你计划入手了吗?
- 建工修复拟定增募不超2.25亿元 2021年上市募3.04亿元
- 学龄前儿童交通事故责任如何认定?交通事故赔偿标准是什么?
- 如何填报高考志愿?6月18日专家开讲!
- 2023养老保险能一次性补缴吗?农民59岁一次补交9万划算吗?
- 如何备份系统?正版win10能用ghost备份吗?
- 股份转让有几种方法?股份转让还需要交税吗?
- 全球快资讯丨猛禽野马均在列 电动车化身“狠角色” 美国现役警车面面观
- 环球热议:人民币后面写字_写人民币时 是不是前面有了 后面就不应该加 ldquo 元 rdquo
- 超速违章照片需要几张?交通技术监控设备的注意事项是什么?
- 黑芝麻汤圆怎么做的_黑芝麻汤圆怎么做
- 今日要闻!无乃尔是过与 翻译无乃_无乃尔是过与 翻译
- 环球速读:75寸电视最佳观看距离多少米_75寸电视最佳观看距离
- 罗山:倡导绿色环保 践行生态文明
- 【世界快播报】下滑18%!新基金发行遇冰点?
- 天天看热讯:存款利率告别3% 如何做好家庭资产配置?专家解读来啦
- 联络互动年报遭问询,要求分析营业收入下滑、亏损规模近三年持续扩大的主要原因
- 盖士人读书文言文原文_盖士人读书文言文翻译盖意思
- iPhone怎么将锁屏通知设置为隐藏?手机酷狗音乐如何恢复被删除的歌单?
- 简易程序判决后可以上诉吗?判决书不签收就不生效是吗?
- 试驾海鸥真实感受:底盘扎实,动力够用,极夜黑加深海蓝好看|天天观速讯
- 银行本票允许转让吗?不记名背书应该怎么转让?
- 全球热头条丨中国预制菜产业规模与市场投资前景
- 交行信用卡如何取现?交通银行信用卡取现额度有哪些规定?
- 个人所得税一年可以退几次?个人所得税第一次如何申报?
- 摩托车后座不应当乘坐未满多少周岁的儿童?驾驶摩托车未戴头盔出事故由谁承担事故责任?
- 信用卡停息挂账申请办法是什么上海?停息挂账行动建议介绍
- 当前热点-吉林省气象台6月7日14时8分将强对流天气蓝色预警升级为强对流天气黄色预警【2023-06-07】
- 多地将有雷雨大风天气,局地风力可达9~10级!黑龙江省发布强对流预报_天天日报