《PG原始碼學習 5 全表掃瞄成本》

2021-10-03 10:38:57 字數 1468 閱讀 2300

postgres的查詢計畫事基於成本的,成本是乙個相對值,用來定性代價。本文結合**學習全表掃瞄的成本計算。

序號名稱說明1

啟動成本

讀取第一條元組前花費的成本

2執行成本

獲取全部元組的成本,包括cpu和disk成本

3總成本

啟動成本和執行成本的和

序號名稱說明1

spc_seq_page_cost

讀取乙個頁面的成本,預設為1.0

2disk_run_cost

磁碟執行成本

3cpu_tuple_cost

每個元組讀取cpu成本,預設為0.01

4qpqual_cost.startup

每個元組操作cpu啟動成本

5qpqual_cost.per_tuple

每個元組操作cpu成本,預設為0.0025

6cpu_per_tuple

每個元組cpu總成本,cpu_tuple_cost + qpqual_cost.per_tuple

7path->pathtarget->cost.startup

每個元組輸出啟動成本

8path->pathtarget->cost.per_tuple

每個元組輸出cpu成本

1)startup_cost=spc_seq_page_cost * pages + qpqual_cost.startup + path->pathtarget->cost.startup

2)disk_run_cost=spc_seq_page_cost pages

3)cpu_run_cost=(cpu_tuple_cost + qpqual_cost.per_tuple) tuples + path->pathtarget->cost.per_tuple * rows

4)total_cost= startup_cost + cpu_run_cost + disk_run_cost

具體實現在postgres\src\backend\optimizer\path\costsize.c中,對應函式cost_seqscan

如果平行計算注意根據並行worker進行折算。

void

cost_seqscan(path *path

, plannerinfo *root

, reloptinfo *baserel

, parampathinfo *param_info)

path-

>startup_cost = startup_cost;

path-

>total_cost = startup_cost + cpu_run_cost + disk_run_cost;

}

繼續加油。

《PG原始碼學習 6 索引掃瞄成本》

postgres的查詢計畫事基於成本的,成本是乙個相對值,用來定性代價。本文結合 學習基於索引掃瞄的成本計算。索引包括btree gist gin brin。序號名稱說明1 啟動成本 讀取第一條元組前花費的成本 2執行成本 獲取全部元組的成本,包括cpu和disk成本 3總成本 啟動成本和執行成本的...

redis原始碼學習之跳躍表

跳躍表對於我來說是乙個比較陌生的資料結構,因此花了一上午的時間先看了一蛤mit的公開課。網易雲課堂 mit跳躍表 什麼是跳躍表,有乙個很簡單的例子,有些地方的火車站跟高鐵站是同乙個站,有的地方只有火車站 假設現在的線路是a b c d e。其中a和c剛剛說的高鐵和火車站在一塊,其他的只有火車站,考慮...

Redis學習 鍊錶原始碼分析

0.前言 redis 中的鍊錶是以通用鍊錶的形式實現的,而對於鍊錶的用途來說,主要的功能就是增刪改查,所以對於查詢來說,redis其提供了乙個match函式指標,使用者負責實現其具體的匹配操作,從而實現通用化。涉及的檔案 adlist.h adlist.c 1.資料結構 typedef struct...