每日关注!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)查询过滤器原理与应用
- 中电兴发:公司目前暂时没有液冷技术数据中心 |每日快报
- 每体:巴萨计划向梅西送上正式报价,但球队无法保证球员能被注册_新要闻
- 世界新消息丨商务预报:5月29日-6月4日36个大中城市食用农产品零售价格情况
- 心理专家到校讲座,科华中路小学教师感受“赞美的力量”
- 镇江句容:废弃地变身“好农田”矿地融合催生“好钱景”-世界滚动
- 关于原点对称的点的坐标规律_关于原点对称的点的坐标
- 【收评】硅铁日内下跌1.59% 机构称硅铁反弹做空为主-速递
- 世界热消息:股票带r是什么意思
- 最新资讯:龙舟赛催生旅游热 多彩活动喜迎八方客
- 世界要闻:突发,闪崩跌停
- 公司在数据管理方面有何优势?优博讯回应 天天热讯
- “开源”有道 “撬动”给力 监管有方 天津财政助力乡村振兴全面推进
- 收评:两市震荡分化沪指小涨 通信服务板块走强
- 微软发掘AI“新用途”:搜索Chrome时BingChat打出推广-天天要闻
- 6月7日江苏森森炭业活性炭价格动态
- 俄罗斯联邦委员会同意废除与乌克兰签署的亚速海和刻赤海峡合作使用条约|世界焦点
- 调查显示:我国消费者对食品添加剂仍存在四大误解_全球微头条
- 天天新消息丨大连市气象局发布海上大风蓝色预警【IV级/一般】【2023-06-07】
- 国内卖了近20年的合资SUV,本田CR-V的混动新车表现如何_环球热讯
- 镇江市公共数据平台案例荣膺数字政府管理创新成果|全球简讯
- 中牟县滨河社区:减少噪音筑梦未来 共同助力考生圆梦 世界关注
- 论述题和简答题的区别_简答题和论述题区别-今日快看
- 环球资讯:文安荆楚 ⑬丨你知道汉江有多特别吗?
- 2023内蒙古高考总分多少分 各科满分是多少
- 广东队重大决定!上海男篮太失望,下赛季希望不大
- 开启执法协作新篇章,太仓举办长三角一体(沪苏)综合执法融合共建暨队列会操“大比武”活动
- 新巨丰拟收购纷美包装股权,深交所下发重组问询函
- 关键IT计划重塑CIO议程
- NixOS 与 Nix Flakes 新手入门
- 高通骁龙8 Gen3曝光:X4超大核主频达3.7GHz 史无前例|天天即时
- 视点!粤港澳大湾区每日地产资讯(2023-6-5)
- 天天通讯!【地评线】河声:全力护航高考 为奋斗的青春喝彩
- 6月7日中油西北顺丁橡胶价格稳定
- 美国女子宣布嫁给AI机器人 称其是完美男人
- 主力合约资金流向金十期货6月6日讯,截至23:00,资金流入方面,铁矿石2309流入4.38亿元,玻璃2309流入2.29亿元,豆油2309流入1.26亿元;资金流出方面,甲醇2309流出4.70亿元,螺纹2310流出1.46亿元,焦煤2309流出1.31亿元
- 安德烈·博雷佐夫楚克
- 前倾45度不倒所用道具_前倾45度
- 【环球快播报】存款利率即将再降?银行:在等通知,3年期定存仍有3%以上产品
- 归暮古诗有哪些 落日归鸟的诗句
- 今日热门!古代带兵打仗的游戏叫啥_古代带兵打仗的游戏
- 快看点丨黄山市首个社区运动健康中心正式启用
- 北京10086人工服务怎么打-10086人工服务怎么打
- 豆丁网首页登录_豆丁网首页登陆 焦点消息
- 当前热门:i5 4590相当于现在什么cpu(i5 2500 cpu参数)
- 《最终幻想16》新实机截图:更黑暗的召唤兽形象! 世界播报
- 快e贷网贷逾期5000延迟还款影响征信吗
- 腊狗肉怎么做好吃视频_腊狗肉怎么做好吃
- 我国生态环境保护制度得到系统性完善 老百姓幸福感和获得感满满
- 当前快讯:中消协:共同推动预付式消费监管在国家层面立法
- 起居注_起居
- 湖南新增调整部分医疗服务价格 7月1日起执行 世界热资讯
- 搞笑韩剧排行榜前十名_搞笑韩剧排行榜前十名介绍
- 航空工业自控所与中国民航科学技术研究院签订战略合作协议
X 关闭
最新资讯
- 全球热议:国考补录今起报名,应届生有更多“捡漏”机会
- 全球观热点:西凤酒10年好喝吗?怎么样?西凤酒10年52度价格多少钱?
- 全球时讯:【在希望的田野上】全国麦收过四成
- 如何看待当前地方财政运行态势 报道
- 地气是什么样的_地气是什么 环球微资讯
- 自动化专业考研最好的学校(自动化类包括哪些专业)
- 环球快资讯:研学游不能只游不学
- 迪马济奥:纳乔接近与皇马延长一年合同
- 最忆是乡间|初夏栗花香
- 宁波到普陀山怎么走最合适?_宁波到普陀山怎么走最快最划算|环球消息
- 通知存款与协定存款利率调整后续:国有大行两类存款利率普遍低于中小行
- 登封市召开2023全国普通高招登封考区考试环境综合治理协调会
- 以“资”润企,邮储银行以金融活水激发民企活力|环球快看
- 今日播报!今年以来8只基金发行失败 近150只基金延长募集期
- 微资讯!LNG供应料趋紧,欧洲天然气价格飙升
- 西安就优化调整生育医疗保障待遇政策征求意见:产检补贴上调为2500元,每增加一胎增加300元
- 湖北十堰首评“最美守井人”
- 环球播报:外媒:铁人三项欧洲锦标赛发生严重事故,1人死亡
- 焦点日报:张碧晨华晨宇再爆大瓜,两张照片揭开彼此最不堪的一面:分开果然是对的
- 中盐化工:金属锂项目经济效益未达到预期 最新资讯
- 平度市税务局成立“温心专家工作室” 为纳税人缴费人“把脉问诊”
- 快资讯:欧股主要股指开盘普涨
- 青腾(关于青腾的基本详情介绍)|环球视讯
- 国寿乐盈一生终身寿险尊享版可靠吗?看承保公司信息、产品保障和收益情况 环球最资讯
- 预警 | 这个板块的新房,已接近售罄!
- 全球滚动:比亚迪前5月出口量超去年全年,成以色列最畅销电动汽车品牌
- 全“绿”以赴,骑向未来!新日幻影F9轻装上阵助力低碳出行|全球快资讯
- 天天热文:曹为教授(关于曹为教授介绍)
- oki打印机驱动官网_oki打印机驱动 世界新视野
- 东方快评丨莫让“网络问诊”成为“问诊陷阱” 天天讯息
- 周而复始是什么意思解释(周而复始的意思是)
- 幽灵线东京如何触发百鬼夜行 幽灵线东京触发百鬼夜行方法介绍_天天热点评
- 当前热讯:河南打造计算产业新高地 产业链规模达到千亿元
- 生殖预成论_关于生殖预成论介绍|全球时讯
- 阿尔巴尼亚币兑换(阿尔巴尼亚币兑换人民币)_全球视讯
- 压强的计算公式如何求液体的密度_压强的计算公式
- 林亭远岫图_关于林亭远岫图概略
- 快讯:高鑫磊和薛之谦的故事_高鑫磊
- 罗斯柴尔德家族“减持”英伟达
- 夏夜“文艺大餐”开席 连续3个月文艺惠民_天天热议
- 湖北住建“安全生产月”活动在湖北工建承建项目举行_前沿资讯
- 泰航寻求订购30架宽体喷气式飞机 下周将向空客和波音发出招标书-焦点速递
- 每日速看!中高考期间这些行为禁止!洛阳发布公开信
- 【世界时快讯】意兴阑珊是什么意思_意兴阑珊的含义
- 今日热闻!中国星辰 | 一语暖人心 揭秘航天搜救队
- 这一大型银行 21家分行将被关闭!约1000名员工将被解聘|环球精选
- 天天速看:2009年中国人均国民收入_中国2012人均gdp
- 火箭少女告别典礼是什么_火箭少女告别典礼简述-天天速读
- 世界看点:芒果适合和什么水果一起榨汁?
- 2023年3月大运悦虎销量怎么样? 在5-10万中排名怎么样?
X 关闭