當(dāng)前觀察:GaussDB(DWS)查詢過濾器原理與應(yīng)用
- 博客園
- 2023-06-07 21:28:58
摘要:GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔離反復(fù)被終止的查詢,防止?fàn)€SQL再次執(zhí)行。
本文分享自華為云社區(qū)《GaussDB(DWS)查詢過濾器原理與應(yīng)用》,作者:門前一棵葡萄樹 。
一、概述
GaussDB(DWS)查詢過濾器(黑名單)提供查詢過濾功能,支持自動隔離反復(fù)被終止的查詢,防止?fàn)€SQL再次執(zhí)行。
主要應(yīng)用場景包含以下兩種:
(相關(guān)資料圖)
1. 異常熔斷機(jī)制
配置異常規(guī)則后,查詢觸發(fā)異常規(guī)則后,異常信息將被記錄在dbms_om.gs_blocklist_query系統(tǒng)表中。同一個查詢觸發(fā)異常規(guī)則次數(shù)超限(query_exception_count_limit)后,查詢自動加入黑名單,黑名單信息同樣保存在dbms_om.gs_blocklist_query系統(tǒng)表中。加入黑名單后,該查詢將被隔離,拒絕執(zhí)行。
2. 緊急攔截
作業(yè)引發(fā)CORE、hang或性能大幅下降等問題時,需要緊急規(guī)避時,可以將作業(yè)加入黑名單進(jìn)行過濾。
原理介紹
查詢過濾器使用作業(yè)Unique SQL ID保存和識別作業(yè)黑名單和異常信息,在SQL中常數(shù)值發(fā)生變化時作業(yè)Unique SQL ID不會隨之發(fā)生變化。Unique SQL ID是遍歷查詢解析樹計算出來的一個整數(shù)值,用于標(biāo)識一類SQL。通常對于DML語句,在計算Unique SQL ID的過程中會忽略常量值。但對于DDL、DCL以及設(shè)置參數(shù)等語句,常量值不會忽略。例如,以下兩個查詢:
select * from t1 where id = 1;select * from t1 where id = 2;
這兩條SQL除過濾條件中的常量不同外,其他全部相同,由此生成的解析樹拓?fù)渫耆嗤?,因此Unique SQL ID相同。Unique SQL ID的計算只會忽略常數(shù)值,而不會忽略其他差異,SQL語句“select * from t2 where id = 1;”與上述兩個SQL的Unique SQL ID就不相同。
將作業(yè)加入黑名單主要有以下兩種方式:
- 在GUC參數(shù)query_exception_count_limit≥0情況下,作業(yè)觸發(fā)異常次數(shù)超過該閾值后自動將作業(yè)加入黑名單;
- 調(diào)用內(nèi)置函數(shù)gs_append_blocklist(unique_sql_id int8)將作業(yè)加入黑名單。
作業(yè)執(zhí)行前判斷作業(yè)是否在黑名單中,如果作業(yè)在黑名單中,拒絕作業(yè)執(zhí)行,直接報錯退出。
作業(yè)被拒絕執(zhí)行后,對作業(yè)加入黑名單原因進(jìn)行分析,問題解決后調(diào)用內(nèi)置函數(shù)gs_remove_blocklist(unique_sql_id int8)將作業(yè)移除黑名單。
二、應(yīng)用示例
2.1 異常熔斷示例
1. 設(shè)置異常熔斷閾值。假設(shè)設(shè)置query_exception_count_limit=1,即只要作業(yè)觸發(fā)異常規(guī)則作業(yè)就會被加入黑名單。
2. 配置異常規(guī)則
創(chuàng)建CPU平均使用率異常規(guī)則cpu_percent_except,作業(yè)運(yùn)行時間超過2000秒且CPU使用率達(dá)到30%時觸發(fā)異常退出:
CREATE EXCEPT RULE cpu_percent_except WITH(ELAPSEDTIME=2000, CPUAVGPERCENT=30);
異常規(guī)則還支持BLOCKTIME、ALLCPUTIME、SPILLSIZE等異常的識別處理,具體可參考:異常規(guī)則簡介與演變。
3. 創(chuàng)建資源池respool1關(guān)聯(lián)異常規(guī)則cpu_percent_except。
CREATE RESOURCE POOL respool1 WITH(except_rule="cpu_percent_except");
資源池支持最多關(guān)聯(lián)63個異常規(guī)則集,每個異常規(guī)則集間獨(dú)立生效,互不影響。
4. 創(chuàng)建業(yè)務(wù)用戶usr1,關(guān)聯(lián)資源池respool1:
CREATE USER usr1 RESOURCE POOL "respool1" PASSWORD "XXXXXX";
5. 用戶usr1運(yùn)行作業(yè),作業(yè)運(yùn)行時間超過2000秒且CPU使用率達(dá)到30%時觸發(fā)“cpu_percent_except”異常規(guī)則,作業(yè)觸發(fā)異常規(guī)則后資源管理對作業(yè)進(jìn)行以下處理:
- 將作業(yè)異常信息保存至系統(tǒng)表GS_BLOCKLIST_QUERY中;
- 如果作業(yè)觸發(fā)異常熔斷,將系統(tǒng)表GS_BLOCKLIST_QUERY中作業(yè)黑名單標(biāo)志置為true;
- 更新GS_BLOCKLIST_QUERY中作業(yè)黑名單信息。
6. 查詢作業(yè)黑名單和異常信息:
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再次運(yùn)行作業(yè)觸發(fā)異常熔斷,GaussDB(DWS)的異常熔斷機(jī)制禁止該作業(yè)執(zhí)行。
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. 優(yōu)化用戶usr1所運(yùn)行ID為4066836196的SQL后,將ID為4066836196的SQL從黑名單移除。
確認(rèn)SQL異常原因,如果異常規(guī)則配置不合理,修改異常規(guī)則;如果異常規(guī)則合理,對SQL進(jìn)行優(yōu)化后重新運(yùn)行。確認(rèn)問題解決后將SQL移除黑名單。
select gs_remove_blocklist(4066836196); gs_remove_blocklist--------------------- t(1 row)
2.2 緊急攔截示例
查詢過濾器使用作業(yè)Unique SQL ID識別和保存黑名單信息,為有效運(yùn)用查詢過濾器緊急攔截功能,建議TopSQL開啟,在作業(yè)引發(fā)CORE、報錯、性能下降等問題時可以快速獲取作業(yè)Unique SQL ID。
2.2.1 獲取作業(yè)Unique SQL ID
獲取作業(yè)Unique SQL ID的幾種方法:
1. 作業(yè)引發(fā)報錯/性能下降
CN日志中獲取作業(yè)query_id,執(zhí)行以下命令查詢作業(yè)Unique SQL ID。
select queryid,unique_sql_id,query from pgxc_wlm_session_info where queryid=query_id;
2. 作業(yè)引發(fā)CN示例CORE
解析CORE打印內(nèi)存中保存的Unique SQL ID對應(yīng)的變量參數(shù)值。
3. 作業(yè)引發(fā)DN實例CORE
作業(yè)引發(fā)DN實例CORE時,CN側(cè)體現(xiàn)為作業(yè)報錯,Unique SQL ID獲取方式可以參考作業(yè)報錯時Unique SQL ID獲取方式。
4. EXPLAIN VERBOSE獲取Unique SQL ID(通用方法,但是僅821及以上版本支持)
EXPLAIN VERBOSE不會實際執(zhí)行SQL,因此一般不會導(dǎo)致問題發(fā)生,使用EXPLAIN VERBOSE XXX;可以打印得到作業(yè)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 將作業(yè)加入黑名單
獲取到作業(yè)Unique SQL ID后,調(diào)用內(nèi)置函數(shù)gs_append_blocklist(unique_sql_id int8)將作業(yè)加入黑名單:
postgres=# select * from gs_append_blocklist(2307078791); gs_append_blocklist--------------------- t(1 row)
2.2.3 查詢黑名單信息
作業(yè)加入黑名單后,查詢系統(tǒng)表確認(rèn)黑名單加入是否成功:
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 再次執(zhí)行作業(yè)觸發(fā)緊急攔截
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 問題解決,將作業(yè)移出黑名單
postgres=# select gs_remove_blocklist(2307078791); gs_remove_blocklist--------------------- t(1 row)
點(diǎn)擊關(guān)注,第一時間了解華為云新鮮技術(shù)~
關(guān)鍵詞:
福建省南平市創(chuàng)新“一庫三單”信息化管理平臺_速看料
- 莆田市29個項目入選福建省2023年重點(diǎn)招商項目
- 含編內(nèi)!福建一批事業(yè)單位招人! 視焦點(diǎn)訊
- 福建高速路嚴(yán)查“分心駕駛” “電子警察”全部啟用
- 福建將提升閩政通APP精準(zhǔn)檢索、智能推送能力 開發(fā)人臉(語音)識別等功能
- 福建出臺促進(jìn)外資擴(kuò)增量穩(wěn)存量提質(zhì)量若干政策措施|熱門看點(diǎn)
- 廈大團(tuán)隊發(fā)現(xiàn)阿爾茨海默病的治療新靶點(diǎn)
- 2023年影視產(chǎn)業(yè)推介會在福建廈門舉行|世界速讀
- 【環(huán)球聚看點(diǎn)】2023年廈金海域聯(lián)合增殖放流活動舉行
- 主題教育進(jìn)行時 | 以賽事經(jīng)濟(jì)助推體育產(chǎn)業(yè)高質(zhì)量發(fā)展
- 當(dāng)前觀察:GaussDB(DWS)查詢過濾器原理與應(yīng)用2023-06-07
- 中石油北京項目管理公司:胡繼勇被免職并接2023-06-07
- 農(nóng)業(yè)農(nóng)村部、體育總局:將舉辦全國“村BA”2023-06-07
- 一箭26星!力箭一號遙二運(yùn)載火箭成功發(fā)射|2023-06-07
- 歲月留聲,“聲生不息”——音樂交流喚醒兩2023-06-07
- 中國“互聯(lián)網(wǎng)+中醫(yī)醫(yī)療”調(diào)研與評估項目結(jié)2023-06-07
- 從歐洲保健品展看營養(yǎng)健康食品創(chuàng)新趨勢2023-06-07
- 世界焦點(diǎn)!廣西壯族自治區(qū)富川瑤族自治縣發(fā)2023-06-07
- 聚焦貴馬|跑貴馬 賞美景 品美食 “六爽2023-06-07
- 當(dāng)前頭條:燃!直擊貴州武警新兵實彈射擊2023-06-07
- 焦點(diǎn)精選!DRG/DIP概念走強(qiáng) 塞力醫(yī)療漲停2023-06-07
- 試卷命制+教學(xué)設(shè)計,大邑縣北街小學(xué)英語組2023-06-07
- 全球觀熱點(diǎn):土耳其里拉兌美元一度大跌7.1%2023-06-07
- 周大生:公司會加大在華東、華南的開店力度2023-06-07
- 負(fù)債超700億!華晨重整有新進(jìn)展 潛在投資2023-06-07
- 通光線纜:目前暫無產(chǎn)品應(yīng)用在大模型計算的2023-06-07
- 手機(jī)殼DIY制造商官網(wǎng)在哪下載 最新官方下2023-06-07
- 擴(kuò)募環(huán)節(jié)的打通 REITs一級半市場料將迎來2023-06-07
- 杰創(chuàng)智能董秘回復(fù):公司主營業(yè)務(wù)暫未直接涉2023-06-07
- 中科星圖在安徽5億成立資本管理公司2023-06-07
- 勃然大怒的意思是用什么方法理解的_勃然大2023-06-07
- 全球微資訊!眾星捧月的意思是什么_眾星捧2023-06-07
- 直系血親關(guān)系包括兄弟姐妹嗎_直系血親關(guān)系2023-06-07
- 今日中國黃金基礎(chǔ)金價(2023年6月7日)2023-06-07
- 妻子的新世界劇情介紹_新世界大結(jié)局彩蛋小2023-06-07
- 全球看點(diǎn):“國企領(lǐng)導(dǎo)與女子牽手”涉事人胡2023-06-07
- 南康區(qū)氣象臺發(fā)布大風(fēng)藍(lán)色預(yù)警信號【IV級/2023-06-07
- 海南自貿(mào)港創(chuàng)業(yè)大賽(三亞賽區(qū))全面啟動 2023-06-07
- 圖集 | 聚焦四川高考首日那些暖心瞬間 2023-06-07
- 喜報!三岔湖小學(xué)獲評“成都市藝術(shù)教育特色2023-06-07