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...