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)
点击关注,第一时间了解华为云新鲜技术~
标签:
抢先读
- 成都个人信用卡停息挂账怎么办理?信用卡停息挂账可以停多久?
- 2023年06月07日[国企改革]涨停板金字塔-当前快看
- 天天快报!每体:巴萨计划向梅西送上正式报价,但球队无法保证球员能被注册
- 环球热头条丨博敏电子:截至本公告披露日 公司及其控股子公司对外担保总额为约26.88亿元
- 焦点速递!世界球精选!《GTAOL》6月13日更新:R星发布圣安地列斯佣兵首支预告
- 亿利洁能资金悬疑:手握43亿现金却致7亿票据逾期?-环球简讯
- 实时:十年暖心相伴 北京链家200余家门店化身“高考服务站”
- GaussDB(DWS)查询过滤器原理与应用 每日热文
- 天天快资讯:港交所:未来内地投资者或可经“港股通”买卖人民币柜台证券
- 市盈率是什么?怎么理解?
- 崇川社会工作领军人才培训班开班 帮助提升社区治理能力 天天速读
- 信用卡停息挂账还清后还能用吗?停息挂账的两大危害你知道吗?
- 万华化学等四川投资设立新能源材料科技公司|环球新资讯
- 【环球报资讯】博济医药创业板再融资审核状态更新为“已问询”
- 上海各银行停息挂账方式有哪些?信用卡逾期有什么影响?
- 人进监狱信用卡可以办停息挂账么?信用卡分期还款的流程介绍
- 停息挂账去银行好办下来吗?停息挂账好申请吗?
- 晒粮致科三考生挂科?交警:粮食覆盖标识线可能导致机器识别有误_即时焦点
- 接受调查近11个月 河南银保监局原一级巡视员李焕亭被“双开”
- 粗心考生考前丢失身份证 考点执勤民警1分钟帮其出证入场
- 世界讯息:中概指数反弹并涨超1%,秦淮数据涨15%领跑其他成分股
- 7日年化收益率?7日年化收益率怎么算每天收益?
- 网贷停息挂账上征信吗?信用卡协商停息挂账分期会影响征信吗?
- 6月7日国内锌精矿市场价格汇总_焦点讯息
- 2023上海宝山区社区工作者招聘考试方法和内容
- 聚焦“农资+服务” 中国农业农村服务业联盟对接活动在山东桓台举办
- 强制猥亵侮辱罪会判多少年
- 图片报:拜仁对克勒舍感兴趣,但他现在不打算离开法兰克福 世界今热点
- 停息挂账证明怎么弄?停息挂账自己怎么去申请?
- 环球信息:光大证券:钾肥大合同价格的确定有望为国内钾肥价格提供底部支撑
- 天天亮点!在网络赌博多久会判刑?
- 6月7日国内苯酐产业链部分价格下滑 快看
- 环球微头条丨华测检测董秘回复:公司的经营情况良好,一季度营业收入和归母净利润均实现稳定增长
- 大行存款利率明日开始下调 有银行三年期定存调降15个基点 释放什么信号 独家焦点
- 金融机构全力支持春耕、夏收 涉农贷款增长创新高
- 借呗怎么开通?申请借呗需要什么条件?
- [大行评级]国信证券:给予金山软件(03888.HK)“买入”评级 目标价37.00至39.30港元
- 茶叶的分销渠道_茶叶销售渠道有哪些
- 环球快看点丨金地集团董秘回复: 一方面是土地储备面积数据,另一方面是合并报表的存货科目,两者并不直接对应,
- 美股锂电公司中比新能源研发钠离子电池,双轮驱动业绩增长 环球速看
- 【环球时快讯】洪都拉斯总统将访华 中国外交部介绍此访安排及期待
- 护航高考 饿了么在京开展急送服务 天天头条
- 今亮点!禅游科技(02660.HK)跌超10%,截至发稿,跌10.23%,报3.86港元,成交额1424.41万港元
- 区间放量平6.7倍什么意思 区间放量
- 青年志愿者“爱心助考”|短讯
- 世界关注:日播时尚(603196)6月7日14点41分触及涨停板
- 当前信息:深交所:腾信创新终止上市 6月15日起进入退市整理期
- 【世界时快讯】我国连续第7个月增加黄金储备 机构预判两年内金价有望达2600美元/盎司
- 【天天聚看点】广西壮族小伙的军旅梦:从篮球冠军到“武警精英”
- 东方电气国内单机容量最大冲击式水电机组完成国产化改造|全球快播
- 世界观焦点:氧化铝6月19日期货挂牌交易 后市铝价走向如何?
- 23安徽债61今日发布发行公告
- 天天观速讯丨中华文明为何能延绵5000年未出现中断?快到“国家书房”一探究竟
- 【全球速看料】东风S3平台首款新车下线!续航500km 11月量产
- 武汉数字经济总量占全市GDP超四成
- 环球热点!岱勒新材:公司5月份处于满产状态,产销量已创历史新高
- 广西月也侗寨体验百家宴,近距离观看歌舞表演,感受侗寨风情-焦点快看
- cpk等于ppk cpk和ppk是什么意思 全球观焦点
- 中国奇谭、宝可梦、姆明……上海电视节线下放映排片来了,你最想看哪一部? 全球热资讯
- 加税立竿见影 新加坡5月外国人购房量暴跌50%
- 什么是逆回购?央行逆回购是什么意思?_全球资讯
- 长安汽车回应网传克扣10%货款:不实,已报案 全球最资讯
- 全球视讯!岱勒新材:公司4、5月份处于满产状态 5月份销售额已创历史新高 6月份会继续提升
- 百度文心一言-Turbo高性能模式开放邀测 世界实时
- kdj是什么意思?kdj三个参数的含义?
- 广西某不锈钢厂7月下旬起全线停产25天
- 产品质量管理系统
- 信濠光电:公司一直致力于与消费电子行业的主流品牌厂商保持密切合作
- 南京一大学生宿舍内被害,疑似被人用刀捅伤身亡,嫌疑人已被控制 当前速讯
- 中石油北京项目管理公司:胡继勇被免职并接受纪委核查
- 天天热头条丨塔克拉玛干沙漠腹地最大集中式光伏电站正式并网发电
- Moldex3D模流分析之充填保压标签
- 最新!荣昌生物获香港联交所批准从股票代码中移除“B” 全球要闻
- 中国芯片稳步推进,美国芯片行业已现颓势,韩荷认清了现实_短讯
- 世界快报:农业农村部、体育总局:将举办全国“村BA”
- 阳江十里银滩旅游攻略路线图(阳江十里银滩旅游攻略)
- 每日讯息!荷兰警方在泽兰省截获多批可卡因
- 乌克兰卡霍夫卡水电站大坝遭破坏,外交部:严重关切
- 5月外储仍超3万亿美元、央行连续七个月增持黄金 释放出什么信号?
- 当前快讯:铵根离子是金属离子吗(铵根离子)
- 当前视讯!铁路网络论坛网(铁路在线论坛)
- 今日快讯:一箭26星!力箭一号遥二运载火箭成功发射
- 刚刚,外汇局公布关键数据|世界看点
- 爵迹小说一共有几部啊(爵迹小说一共有几部)
- 微动态丨精伦电子(600355)6月7日主力资金净卖出221.17万元
- 中国东航:8月旅客周转量同比上升62.14%|环球即时
- 【世界报资讯】寡助之至的下一句_寡助之至的之翻译
- 给老师同学的祝福语_老师要求同学们明确目的和态度修改病句
- 四边形有哪几种它们各有什么特征_四边形有哪几种
- Lunaz展示其电动阿斯顿马丁DB6EV
- 世界新动态:兽不足到此人何取而自贻患耶_兽不足道,此人何取而自贻患耶翻译
- 天天时讯:亚克力和有机玻璃哪个实用(亚克力和有机玻璃的区别)
- 重磅!福建省口岸转关货物直通模式将在莆田国际陆港开展试点
- 为什么不建议对调轮胎(汽车前后轮胎多久调换一次?) 世界快讯
- 大学校长属于什么级别干部(宝马z4属于什么级别?)
- 4个工作日,北京大兴发出首张“一业一证”行业综合许可凭证
- 签约投资额达44.5亿元!河北10个氢能产业项目在佛山现场签约
- 【环球时快讯】刺客信条2兄弟会迅雷(刺客信条2兄弟会)
- 断章卞之琳赏析简短_断章卞之琳赏析|天天通讯
- 河北:推广招标投标“双盲”评审 全面推行评标专家“盲抽”