GaussDB(DWS)查询过滤器原理与应用 播报

2023-06-08 01:11:06 博客园
摘要: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)查询过滤器(黑名单)提供查询过滤功能,支持自动隔

2023-06-08

端午假期前一天北京至淄博高铁一票难求

7日开始,民众可购买6月21日(端午假期前一天)的火车票,7日中午,记

2023-06-08

ATFX:远期售汇存款保证金上调20,人民银行稳汇率意图明显-当前播报

今日上午9:16,人民银行发布公告称:为稳定外汇市场预期,加强宏观审慎

2023-06-08

热讯:送子由使契丹阅读答案_送子由使契丹翻译及赏析

想必现在有很多小伙伴对于送子由使契丹翻译及赏析方面的知识都比较想要

2023-06-08

什么是教育的首要任务问题_什么是教育的首要问题 全球快资讯

想必现在有很多小伙伴对于什么是教育的首要问题方面的知识都比较想要了

2023-06-08

【全球新视野】直击郑州高考现场!加油吧少年

今天是2023高考第一天无数学子奔赴考场为青春和梦想而战我们用镜头记录

2023-06-08

阜蒙县气象局发布冰雹橙色预警【Ⅱ级/严重】【2023-06-07】-热点

冰雹橙色预警信号:预计未来4到6小时,阜蒙县将出现冰雹天气,同时可能

2023-06-08

马不停蹄!考生不慎遗失身份证,武汉青山民警一天连帮3名考生-动态焦点

极目新闻记者叶文波通讯员刘海李文琪实习生陈宽李梦雨“喂,你的高考准

2023-06-08

“鼠头罗生门”持续发酵:网友不买账校方通报,之前出过类似事件

近日,在江西一高校官微6月3日通报“食堂吃出老鼠头”事件后,由于官方

2023-06-08

江西省出台举措加快推进农业产业化高质量发展-环球通讯

2025年力争农产品加工业总产值达1万亿元  农业产业化是加快建设农业

2023-06-08

人才流失对港经济影响严重!很难看到的港澳荣景,这个夏天有点冷

人才流失对港经济影响严重!很难看到的港澳荣景,这个夏天有点冷,澳门,

2023-06-08

某房企四大名著烂尾项目!

某房企四大名著烂尾项目!,住宅,烂尾楼,许家印,写字楼,四大名著,建筑面积

2023-06-08

楚江新材:碳化钽产业化项目已建成投产;高纯碳粉产品处于技术中试阶段 当前速讯

每经AI快讯,有投资者在投资者互动平台提问:请董秘百忙中介绍下公司碳

2023-06-08

【全球时快讯】西门子医疗上海诊断试剂基地在浦东正式投产 总投资近30亿元

据浦东发布消息,6月5日,西门子医疗亚太区首个诊断试剂生产研发基地—

2023-06-08

宏盛股份:储能及动力电池液冷技术正在开发中|世界微头条

宏盛股份6月7日在互动平台表示,公司有风力发电液冷技术、储能及动力电

2023-06-08

恩捷股份:公司现有隔膜产品适用于储能电池

恩捷股份(002812)06月07日在投资者互动平台表示:您好,公司现有隔膜

2023-06-08

进销存软件免费版-全球热闻

进销存软件免费版是进销存软件厂商面向小微企业推出的免费进销存管理软

2023-06-08

上海今年第五批次新房将入市 共有7087套房源

中证网讯(记者王可)据上海市房地产交易中心消息,6月7日,上海发布20

2023-06-08

李素明新任东吴基金总经理兼财务负责人

6月7日,东吴基金发布公告,李素明新任公司总经理兼财务负责人,于6月6

2023-06-08

【收评】热卷日内下跌1.59% 近5日累计涨幅3.91%

行情表现6月7日收盘价当日涨跌幅五日涨跌幅热卷3721 00元 吨-1 59%3 91

2023-06-08

理想汽车北京顺义工厂最早7月投产?官方回应:确实在积极准备中 全球报资讯

理想汽车的北京顺义工厂或即将投产。  近日,据《每人Auto》消息,理

2023-06-08

雪人股份获大订单!助力沙特NEOM新未来城建设

6月7日消息,近年来,随着全球对可持续发展和绿色能源的需求不断增长,

2023-06-08

世界最资讯丨全县园区(集中区)建设工作座谈会召开

6月7日,全县园区(集中区)建设工作座谈会召开。县委书记张拴会主持会

2023-06-07

世界视点!海南开放大学“主题教育进社区”百场宣讲活动正式启动

新海南客户端、南海网6月7日消息(记者党朝峰)6月6日上午,海南开放大

2023-06-08

全球微动态丨直击恭城高考首日!护航梦想,一路同行

6月7日,2023年高考正式拉开帷幕,我县2026名考生奔赴考场,为梦想而战

2023-06-08

6月7日国内部分钢厂锰系金属招标情况

6月6日-7日招标信息:河钢集团2023年6月电解锰招标启动,数量600吨,截

2023-06-08

6月7日湖南地区电解锰市场价格

湖南地区1 电解锰报价区间在14600-14800元 吨,均价14700元 吨,较前一

2023-06-07

万兴播爆海外版Wondershare Virbo发布 支持0门槛AI生成脚本-观点

爱尔兰当地时间5月31日,欧洲B2B科技盛会都柏林科技峰会(DublinTechSumm

2023-06-08

环球热头条丨网约车复苏趋势已来!T3出行发布年轻化战略,超级出行APP是亮点

网约车行业的市场动向依旧涌动。一方面平台的复苏趋势带动多品牌的积极

2023-06-07

挖莲藕去!采收过程中还有这些讲究

标准化种植保质保产线上销售提销量总台记者张琦:在广州市从化区桂峰山

2023-06-08

最新发布
精彩图文
精彩推送

Copyright ©  2015-2022 国华娱乐网版权所有  备案号:京ICP备2021034106号-22   联系邮箱:55 16 53 8 @qq.com