Hologres的EXPLAIN和EXPLAIN ANALYZE簡介

文章目錄

  • 一、執行計劃
    • 1、概念簡介
    • 2、使用方式
      • ①、EXPLAIN
      • ②、EXPLAIN ANALYZE
  • 二、算子解讀
    • 1、SCAN
    • 2、Index Scan和 Index Seek
    • 3、Filter
    • 4、Decode
    • 5、Redistribution
    • 6、Join
    • 7、Broadcast
    • 8、Shard prune和Shards selected
    • 9、ExecuteExternalSQL
    • 10、Aggregate
    • 11、Sort
    • 12、Limit
    • 13、Append
    • 14、Exchange
    • 15、Forward
    • 16、Project

一、執行計劃

1、概念簡介

EXPLAIN:代表優化器QO根據SQL特征預估的SQL執行計劃,并非實際的執行計劃,對SQL的運行有一定參考意義。

EXPLAIN ANALYZE:代表SQL真實的運行計劃,相比EXPLAIN會包含更多的實際運行信息,能準確的反映出SQL的執行算子和算子耗時,可以根據算子耗時去做針對性的SQL優化。

2、使用方式

①、EXPLAIN

EXPLAIN <sql>;示例: 
EXPLAIN SELECTl_returnflag,l_linestatus,sum(l_quantity) AS sum_qty,sum(l_extendedprice) AS sum_base_price,sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,avg(l_quantity) AS avg_qty,avg(l_extendedprice) AS avg_price,avg(l_discount) AS avg_disc,count(*) AS count_order
FROMlineitem
WHEREl_shipdate <= date '1998-12-01' - interval '120' day
GROUP BYl_returnflag,l_linestatus
ORDER BYl_returnflag,l_linestatus;

在這里插入圖片描述

解釋說明: 執行計劃需要從下往上看,每個箭頭(->)代表一個節點,每個子節點會返回使用的算子,以及預估的行數等。

在這里插入圖片描述

②、EXPLAIN ANALYZE

EXPLAIN ANALYZE <sql>;示例:
EXPLAIN ANALYZE SELECTl_returnflag,l_linestatus,sum(l_quantity) AS sum_qty,sum(l_extendedprice) AS sum_base_price,sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,avg(l_quantity) AS avg_qty,avg(l_extendedprice) AS avg_price,avg(l_discount) AS avg_disc,count(*) AS count_order
FROMlineitem
WHEREl_shipdate <= date '1998-12-01' - interval '120' day
GROUP BYl_returnflag,l_linestatus
ORDER BYl_returnflag,l_linestatus;

在這里插入圖片描述

解釋說明: EXPLAIN ANALYZE的執行結果反映的是真實執行路徑,其結果是一個由多個算子組成的樹狀結構,會反映出每個階段每個算子的詳細執行信息。EXPLAIN ANALYZE的結果主要包括Query Plan、Advice、Cost耗時、Resource資源消耗情況。

二、算子解讀

詳情點擊參考

1、SCAN

Seq Scan表示順序地從表中讀取數據,會進行全表掃描。

2、Index Scan和 Index Seek

如果掃描表有命中索引,根據表的存儲格式(行存或列存) Hologres在底層使用的索引也不同。

1、Clustering_index:表示使用了列存表的索引(例如segment 、clustering等),只要查詢命中索引就會使用Clustering_index。
2、Index Seek(又名pk_index):表示使用了行存表的索引,主要是主鍵索引。

3、Filter

Filter代表將數據根據SQL條件進行過濾,一般會跟隨seq scan on table一起,是seq scan的子節點,表示掃描表時是否有過濾,以及過濾條件是否命中索引。

主要包括: Filter、Segment Filter、Cluster Filter、Bitmap Filter、Join Filter

4、Decode

Decode表示對數據進行解碼或者編碼,以加速text等文本類數據的計算。

5、Redistribution

Redistribution表示數據通過哈希分布或者隨機分布,查詢時shuffle到一個或者多個shard。

如果出現redistribution,則說明沒有利用local join的能力,導致查詢性能不佳。沒有利用有兩種情況
1.distribution key設置不合理
2.對應的key(如join key、group by key)涉及到表達式時

6、Join

多表關聯(Join)根據SQL的書寫方式又分為hash join、nested loop和merge join。
Hash Join:  hash join是指兩個表或者多表join時,基于其中一個表(一般為小表)在內存中構建一個hash表,并把join的列值進行hash計算后放進hash表中,之后逐行的讀取另外的表,計算出其hash值并在hash表中查找,最終返回匹配的數據。當出現hash join時,我們需要額外關注join表中的小表(數據量較小的表)是否是做了hash表,可以通過如下幾種方式查看:
1、執行計劃中,有hash字樣的表是hash表。
2、執行計劃中,從下往上看,最下面的表則是hash表。
Nested Loop Join和Materialize:  
Nested Loop代表嵌套循環連接,多表關聯時,先從一張表中讀取數據,成為外層表,再將外層驅動表的每條數據遍歷另外的表(即內層表),然后內外層表嵌套循環進行Join,相當于計算笛卡爾積。在執行計劃中第一內層表通常有Materialize算子。

7、Broadcast

Broadcast指通過廣播的方式將數據分發到各個shard,通常用在Broadcast Join的場景中,一般是小表join大表。

8、Shard prune和Shards selected

Shard prune: 表示獲取Shard的方式,包括:

lazaily:根據節點中的Shard ID先標記對應的Shard,在后續計算時選擇對應的Shard。
eagerly:根據命中的Shard選擇對應的Shard,不需要的Shard則不需要選擇。

優化器會根據執行計劃來自動匹配Shard prume的方式,無需手動調節。

Shards selected: Shards selected表示選中了多少個Shard,例如1 out of 20表示在20個Shard中選中了一個Shard。

9、ExecuteExternalSQL

Hologres的計算引擎會分為HQE、PQE、SQE等,其中PQE是原生Postgres引擎,部分Hologres自研引擎HQE還沒有支持的算子和函數,會通過PQE執行,相比于HQE,PQE的執行效率會更低。當我們在執行計劃中看到有ExecuteExternalSQL算子,說明有函數或者算子走了PQE。

10、Aggregate

Aggregate代表將數據聚合,可以是一個聚合函數或者多個聚合函數的組合。

  1. GroupAggregate:表示數據已經按照group by進行了預排序。
  2. HashAggregate(最常見):表示數據先進行hash計算,然后通過hash值分發至不同的shard進行聚合,最終通過Gather算子聚合。
  3. 多階段HashAggregate:數據是在shard中按照文件存儲的,文件有不同的層級,當數據量多時,聚合的階段也會分為多個階段。主要的子算子包括:
    Partial HashAggregate:文件和shard內的聚合。
    Final HashAggregate:多個shard上的數據聚合在一起。

11、Sort

sort表示將數據按順序排序(升序ASC或者降序DESC),通常是order by子句的結果。

調優建議:如果order by的數據量較大,將會消耗較多的資源,需要盡量避免大數據量的排序查詢。

12、Limit

limit表示SQL最終允許返回的數據行數。并不代表實際計算中掃描的行數

13、Append

子查詢的結果合并,通常為Union All操作。

14、Exchange

Shard內的數據交換。無需過多關注。

15、Forward

Forward代表將算子的數據在HQE與PQE或者SQE之間傳輸,一般是HQE+PQE或者HQE+SQE的組合會出現。

16、Project

Project一般表示子查詢與外層查詢的映射關系,無需過多關注。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87955.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

49-Oracle init.ora-PFILE-SPFILE-啟動參數轉換實操

一早出現EMCC掛了&#xff0c;之后發現EMCC依賴的instance 掛了&#xff0c;重啟startup后發現spfile無法啟動。還是和小伙伴把基礎問題搞清。spfile是動態文件、動態文件、動態文件&#xff0c;linux下vi看起來部分亂碼部分是可編輯的&#xff0c;vi即使可以編輯也需要轉換成p…

spring碎片

包的掃描過程 判斷當前是否是文件夾獲取文件夾里面的所有內容判斷文件夾是否為空,為空的話直接返回如果文件夾不為空,則遍歷文件夾里面的所有內容 遍歷得到每個file對象,繼續進行判斷,如果還是文件,則進一步進行遞歸遍歷得到的file對象不是文件夾,是文件得到包路徑類名稱-字符…

如何形成項目經驗在多個項目間的高效復用?

要實現項目經驗的跨項目高效復用&#xff0c;核心在于建立系統化總結機制、標準化知識表達、平臺化共享工具。其中&#xff0c;標準化知識表達尤為關鍵&#xff0c;它通過統一模板和分類體系&#xff0c;確保不同項目的經驗可以被快速理解、輕松匹配到新場景&#xff0c;從而提…

目標檢測之YOLOV11談談OBB

引言&#xff1a;從軸對齊到定向邊界框的范式轉變 在計算機視覺領域&#xff0c;目標檢測算法長期受限于軸對齊邊界框&#xff08;AABB&#xff09;的固有缺陷——當面對航拍圖像中的艦船、遙感影像中的建筑物或工業質檢中的傾斜零件時&#xff0c;傳統邊界框會包含大量背景噪…

Vue2之生命周期

文章目錄 Vue生命周期Vue生命周期鉤子生命周期鉤子小案例在created中獲取數據在mounted中獲取焦點 Vue生命周期 思考&#xff1a;什么時候可以發送初始化渲染請求&#xff1f;&#xff08;越早越好&#xff09;什么時候可以開始操作dom&#xff1f;&#xff08;至少dom得渲染出…

Web 架構之多租戶(SaaS)系統設計要點

文章目錄 一、多租戶系統概述定義應用場景 二、設計要點1. 數據隔離獨立數據庫共享數據庫&#xff0c;獨立 Schema共享數據庫&#xff0c;共享 Schema數據訪問控制 2. 資源分配計算資源存儲資源 3. 租戶管理租戶注冊與注銷租戶信息管理 4. 安全與合規身份驗證與授權數據加密 三…

【Clickhouse系列】索引

目錄 1. 主鍵索引 (Primary Key Index) - 核心是稀疏索引 2. 跳數索引 (Data Skipping Indexes) - 二級索引 3. 關鍵總結與最佳實踐&#xff1a; ClickHouse的索引設計哲學與其他傳統OLTP數據庫&#xff08;如MySQL&#xff09;有顯著不同&#xff0c;它更側重于高效掃描大數…

445場周賽

第一題&#xff1a;檢查元素頻次是否為質數 給你一個整數數組 nums。 如果數組中任一元素的 頻次 是 質數&#xff0c;返回 true&#xff1b;否則&#xff0c;返回 false。 元素 x 的 頻次 是它在數組中出現的次數。 質數是一個大于 1 的自然數&#xff0c;并且只有兩個因數…

【SQL語法匯總】

讀音:MySQL —— 賣舌口 MySQL 實際上是DBMS軟件系統, 并非數據庫。通過系統管理維護數據庫,DBMS相當于用戶和數據庫之間的橋梁。 MySQL是一種關系型數據庫, 類似excel,用行和列的關系組織數據數據。 操作關系型數據庫的DBMS系統大多數用SQL來管理數據。 SQL是編程語言…

C++法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。

C法則10&#xff1a;引用本身是一個“別名”&#xff08;alias&#xff09;&#xff0c;一旦綁定到一個對象后&#xff0c;就不能再重新綁定到其他對象。 在C中&#xff0c;引用&#xff08;reference&#xff09;是一個已存在對象的別名。一旦引用被初始化綁定到一個對象&…

PHP 生成當月日期

一&#xff1a;按日期順序排列的數組&#xff0c;而不是按周分組的二維數組 /*日期生成 *day: 日期數字 *date: 完整的日期字符串 (YYYY-MM-DD) *is_current_month: 是否屬于當前月份 *is_prev_month: 是否是上個月的日期 *is_next_month: 是否是下個月的日期 *is_today: 是否是…

vue3+elementPlus實現無縫滾動表格封裝

vue3+elementPlus+css+js 模擬liMarquee插件,實現無限滾動效果 功能:1、表格數據大于一定數量之后,開始向上滾動 2、當鼠標移入的時候,動畫停止,鼠標移出,繼續動畫 3、滾動動畫的速度可以自定義 4、表格的高度固定 5、向上滾動時,無限滾動,不存在卡頓 <template>…

AI賦能企業內訓:2025智能化教育培訓系統源碼開發全解析

從線下集中授課到線上碎片化學習&#xff0c;從被動灌輸到主動交互&#xff0c;越來越多企業開始關注“企業內訓系統”的智能化升級。而這一切的背后&#xff0c;離不開AI技術的深度賦能。 筆者認為&#xff0c;2025年將是企業內訓系統“從信息化走向智能化”的關鍵拐點。本篇…

旅游安全急救實訓室:構建旅游行業安全人才培養新范式

在文旅產業蓬勃發展與安全應急需求日益凸顯的背景下&#xff0c;旅游安全急救能力已成為從業者的核心素養之一。當前&#xff0c;旅游市場突發狀況頻發&#xff0c;如景區意外事故、游客突發疾病等&#xff0c;對從業人員的急救技能提出了更高要求——既要掌握基礎急救操作&…

網絡編程及原理(六):三次握手、四次揮手

目錄 一 . TCP 的核心機制&#xff1a;連接管理 二 . 三次握手&#xff1a;建立連接 &#xff08;1&#xff09; 三次握手的意義 &#xff08;1.1&#xff09;初步驗證通信鏈路是否流暢 &#xff08;1.2&#xff09;確認通信雙方各自的發送、接受能力是否正常 &…

【LLaMA 3實戰】2、LLaMA 3對話能力全解析:從架構革新到多智能體實戰指南

引言:LLaMA 3對話能力的革命性突破 當Meta發布LLaMA 3時,其對話能力的躍升重新定義了開源大模型的邊界。這款擁有128K上下文窗口的開源模型,不僅在MT-Bench評測中超越GPT-3.5,更通過分組查詢注意力(GQA)等架構創新,實現了推理速度30%的提升。 本文將從底層架構到應用實戰…

面試題-在ts中類型轉換的方法

在 TypeScript 中&#xff0c;類型轉換主要分為 類型斷言&#xff08;Type Assertion&#xff09;、類型守衛&#xff08;Type Guard&#xff09; 和 類型兼容轉換 三種方式。以下是詳細分類和示例&#xff1a; 一、類型斷言&#xff08;Type Assertion&#xff09; 強制編譯…

IIS配置SSL證書

公司的一個項目使用IIS部署的網站&#xff0c;現在需要更新SSL證書。為了下次方便&#xff0c;在此做記錄整理。 以下第一部分是查網絡AI查詢到的資料&#xff0c;解決了我心中對雙擊和從IIS導入有什么不同的疑惑。第二部分是我在這次實際操作過程中的截圖。 一.證書安裝方式 …

K8s初始化容器與邊車容器比對

Kubernetes 中的初始化容器和邊車容器 Kubernetes 作為一個開源容器編排平臺&#xff0c;引入了強大的概念來管理和增強 Pod 內容器的功能。其中兩個概念是初始化容器&#xff08;Init Containers&#xff09;和邊車容器&#xff08;Sidecar Containers&#xff09;。盡管這兩…

無線Debugger攻防全解:原理剖析與突破之道

引言?? 在Web安全防護體系中&#xff0c;反調試技術已成為對抗爬蟲和分析的關鍵武器。2023年OWASP報告顯示&#xff0c;Top 1000網站中92%部署了反調試機制&#xff0c;其中??無線Debugger技術??&#xff08;也稱為無限Debug&#xff09;因其難以破解的特性&#xff0c;…