主頁 > 資料庫 > GaussDB(DWS)查詢過濾器原理與應用

GaussDB(DWS)查詢過濾器原理與應用

2023-06-08 09:43:01 資料庫

摘要: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, reltoas
tidxid, reldeltarelid, reldeltaidx, relcudescrelid, relcudescidx, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasoids, relhaspkey, r
elhasrules, 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)

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554638.html

標籤:其他

上一篇:SQL Server 補丁理解及安裝 內附完整版下載地址及sp1/2/3補丁

下一篇:返回列表

標籤雲
其他(160596) Python(38215) JavaScript(25484) Java(18209) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7238) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1983) 功能(1967) HtmlCss(1955) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1880) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • GaussDB(DWS)查詢過濾器原理與應用

    摘要:GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔離反復被終止的查詢,防止爛SQL再次執行。 本文分享自華為云社區《GaussDB(DWS)查詢過濾器原理與應用》,作者:門前一棵葡萄樹 。 一、概述 GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔 ......

    uj5u.com 2023-06-08 09:43:01 more
  • SQL Server 補丁理解及安裝 內附完整版下載地址及sp1/2/3補丁

    啟動安裝程式 下載sqlserver2014,雙擊startup.exe進行安裝 系統配置檢查器 使用系統配置檢查器,看系統是否符合安裝sqlserver2014的所有要求 開始安裝 然后點擊安裝,全新sqlserver獨立安裝或向現有安裝添加功能 安裝規則 然后就是使用默認的設定,點開詳細資訊,可 ......

    uj5u.com 2023-06-08 09:42:22 more
  • 一份配置輕松搞定表單渲染,配置式表單渲染器在袋鼠云的實作思路與

    前段時間,[袋鼠云離線開發產品](https://www.dtstack.com/dtinsight?src=https://www.cnblogs.com/DTinsight/archive/2023/06/07/szsm)接到改造資料同步表單的需求。 一方面,[資料同步模塊](https://www.dtstack.com/dtinsight?src=szsm)的代碼可讀性和可維護性較差,導致在資料 ......

    uj5u.com 2023-06-08 09:40:24 more
  • SQL Server 補丁理解及安裝 內附完整版下載地址及sp1/2/3補丁

    啟動安裝程式 下載sqlserver2014,雙擊startup.exe進行安裝 系統配置檢查器 使用系統配置檢查器,看系統是否符合安裝sqlserver2014的所有要求 開始安裝 然后點擊安裝,全新sqlserver獨立安裝或向現有安裝添加功能 安裝規則 然后就是使用默認的設定,點開詳細資訊,可 ......

    uj5u.com 2023-06-08 09:39:20 more
  • 國產資料庫的譜系

    資料庫產品的成功絕對不是技術堆疊的成功,而是需要有大量的應用場景磨合才能逐步成功的。如果僅僅依靠自己那幾百個用戶,想要發展出成熟的高水平的商用資料庫產品來,那幾乎是不太能的。依靠開源社區的廣大用戶來研發自己的資料庫產品不失為一種比較好的策略。 ......

    uj5u.com 2023-06-08 09:38:28 more
  • 手記系列之五 ----- SQL使用經驗分享

    ## 前言 本篇文章主要介紹的關于本人從剛作業到現在使用Sql一些使用方法和經驗,從最基本的SQL函式使用,到一些場景的業務場景SQL撰寫。 ## SQL基礎函式使用 ### 1.欄位轉換 CASE WHEN 意義: If(a==b) a=c; 用法: 1, CASE 欄位 WHEN 欄位結果1 T ......

    uj5u.com 2023-06-08 09:36:41 more
  • 《SQL 必知必會》全決議

    > 不要哀求,學會爭取。若是如此,終有所獲。 > > 原文:https://mp.weixin.qq.com/s/zbOqyAtsWsocarsFIGdGgw ## 前言 你是否還在煩惱 SQL 該從何學起,或者學了 SQL 想找個地方練練手?好巧不巧,最近在作業之余登上牛客,發現了牛客不知道啥時候 ......

    uj5u.com 2023-06-08 09:36:17 more
  • GaussDB(DWS)查詢過濾器原理與應用

    摘要:GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔離反復被終止的查詢,防止爛SQL再次執行。 本文分享自華為云社區《GaussDB(DWS)查詢過濾器原理與應用》,作者:門前一棵葡萄樹 。 一、概述 GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔 ......

    uj5u.com 2023-06-08 09:36:10 more
  • Hive執行計劃之hive依賴及權限查詢和常見使用場景

    [TOC] ## 概述 Hive查看執行計劃的命令中還有兩個不怎么常用但很重要的命令,接下來詳細介紹一下。 有一個問題:**如何在hiveSQL執行之前就探查到這段邏輯的血緣依賴關系?** hive血緣是很多生產級數倉必須要提供的功能,大多數解決方案都是**使用hive hooks的方法通過SQL執 ......

    uj5u.com 2023-06-08 09:35:52 more
  • kafka的安裝和基本操作

    # 基本概念 ## 簡介 Kafka 最初是由 LinkedIn 即領英公司基于 Scala 和 Java 語言開發的分布式訊息發布-訂閱系統,現已捐獻給Apache 軟體基金會。其具有高吞吐、低延遲的特性,許多大資料實時流式處理系統比如 Storm、Spark、Flink等都能很好地與之集成。 總 ......

    uj5u.com 2023-06-08 09:35:45 more