91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL中PlannedStmt結構的日志分析

發布時間:2021-11-11 09:34:24 來源:億速云 閱讀:207 作者:小新 欄目:關系型數據庫

這篇文章主要介紹了PostgreSQL中PlannedStmt結構的日志分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

PostgreSQL中PlannedStmt結構的日志分析

APPEND->appendplans

APPEND->appendplans是鏈表結構,有2個元素,每個元素的類型為T_NESTLOOP(內嵌循環),通常的信息與其他節點類型類似,重點是lefttree和righttree均不為空,jointype為0表示INNER_JOIN

LIMIT->SORT->APPEND->appendplans->head
lefttree
進入第一個元素的左樹

              :lefttree 
                  {SEQSCAN /T_SEQSCAN類型的Node,順序掃描
                  :startup_cost 0.00 
                  :total_cost 12.00 
                  :plan_rows 1 //涉及的行數
                  :plan_width 256 //平均行寬
                  :parallel_aware false 
                  :parallel_safe true 
                  :plan_node_id 5 //Plan id
                  :targetlist (...) //省略
                  :qual (
                     {OPEXPR 
                     :opno 98  //PG_OPERATOR OID of the operator,texteq字符串相等
                     :opfuncid 67 //PG_PROC OID of underlying function,texteq字符串相等
                     :opresulttype 16 //PG_TYPE OID of result value,bool值
                     :opretset false 
                     :opcollid 0 //pg_collation
                     :inputcollid 100 //輸入的collation(default)
                     :args (//參數,鏈表類型
                        {RELABELTYPE //第1個參數為RelabelType類型
                        :arg //指向Expr的指針,實際類型為VAR
                           {VAR //第
                           :varno 4 //在rtable中處于第4個位置的RTE
                           :varattno 2 //屬性編號
                           :vartype 1043 //類型,pg_type OID,varchar
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 4 //原始的varno
                           :varoattno 2 //原始的varattno
                           :location 110//token位置(在SQL語句中)
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelformat 2 
                        :location -1
                        }
                        {CONST //第2個參數為Const類型
                        :consttype 25 //pg_type OID
                        :consttypmod -1 //
                        :constcollid 100 //
                        :constlen -1 
                        :constbyval false //傳值?如為false,則constvalue中的前4個字節為value的說明,在這個案例中,為32(即2的4次方),從第5個字節開始,長度為4的字符串
                        :constisnull false 
                        :location 205 //token所在位置
                        :constvalue 8 [ 32 0 0 0 49 48 48 49 ]//即字符串"1001"
                        }
                     )
                     :location -1
                     }
                  )
                  :lefttree <> //左樹為空
                  :righttree <> //右樹為空
                  :initPlan <> //無初始化Plan
                  :extParam (b)
                  :allParam (b)
                  :scanrelid 4 //掃描第4號RTE
                  }

rigthtree
進入第一個元素的右樹

               :righttree 
                  {HASHJOIN //NestLoop右樹節點類型是HashJoin(t_grxx join t_jfxx)
                  :startup_cost 16.15 
                  :total_cost 36.12 
                  :plan_rows 7 //涉及的行數
                  :plan_width 180 //平均行大小
                  :parallel_aware false 
                  :parallel_safe true 
                  :plan_node_id 6 //計劃節點id
                  :targetlist (...) //投影列,省略
                  :qual <> //表達式
                  :lefttree //左樹,暫時折疊
                     {...}
                  :righttree //右樹,暫時折疊
                     {...}
                  :initPlan <> //初始化Plan
                  :extParam (b)
                  :allParam (b)
                  :jointype 0 //INNER_JOIN
                  :inner_unique false //非唯一inner join
                  :joinqual <> 
                  :hashclauses (//hash信息,類型為OpExpr
                     {OPEXPR 
                     :opno 98 //pg_operator Oid,"=",texteq
                     :opfuncid 67 //pg_proc Oid,texteq
                     :opresulttype 16 
                     :opretset false 
                     :opcollid 0 //default collation
                     :inputcollid 100 
                     :args (//參數鏈表
                        {RELABELTYPE//第1個元素 RelabelType
                        :arg 
                           {VAR //VAR類型
                           :varno 65001 //TODO
                           :varattno 1 //第1列
                           :vartype 1043 //字符串,varchar
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 7 //原varno,7號RTE,即t_jfxx
                           :varoattno 1 //原屬性no
                           :location 171//SQL語句中的token位置
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelformat 2 
                        :location -1
                        }
                        {RELABELTYPE //第1個元素 RelabelType
                        :arg 
                           {VAR //VAR類型
                           :varno 65000 
                           :varattno 1 
                           :vartype 1043 
                           :vartypmod 14 
                           :varcollid 100 
                           :varlevelsup 0 
                           :varnoold 5 //5號RTE,即t_grxx
                           :varoattno 2 //2號屬性
                           :location 157
                           }
                        :resulttype 25 
                        :resulttypmod -1 
                        :resultcollid 100 
                        :relabelformat 2 
                        :location -1
                        }
                     )
                     :location -1
                     }
                  )
                  }
               :initPlan <> //無初始化Plan
               :extParam (b)
               :allParam (b)
               :jointype 0 //INNER_JOIN
               :inner_unique false 
               :joinqual <> 
               :nestParams <>

下面考察HashJoin的左樹和右樹,首先看左樹
...head(Plan)->righttree(HashJoin)->lefttree

                  :lefttree 
                     {SEQSCAN //順序掃描
                     :startup_cost 0.00 
                     :total_cost 17.20 
                     :plan_rows 720 
                     :plan_width 84 
                     :parallel_aware false 
                     :parallel_safe true 
                     :plan_node_id 7 //計劃id
                     :targetlist (...)
                     :qual <> 
                     :lefttree <> 
                     :righttree <> 
                     :initPlan <> 
                     :extParam (b)
                     :allParam (b)
                     :scanrelid 7//編號為7的RTE即t_jfxx
                     }

再看HashJoin右樹
...head(Plan)->righttree(HashJoin)->righttree

                  :righttree 
                     {HASH //Hash操作(創建Hash表)
                     :startup_cost 16.12 
                     :total_cost 16.12 
                     :plan_rows 2 //涉及2行
                     :plan_width 134 
                     :parallel_aware false 
                     :parallel_safe true 
                     :plan_node_id 8 
                     :targetlist (...)
                     :qual <> 
                     :lefttree //左樹也是一個Plan
                        {SEQSCAN //左樹為順序掃描
                        :startup_cost 0.00 
                        :total_cost 16.12 
                        :plan_rows 2 
                        :plan_width 134 
                        :parallel_aware false 
                        :parallel_safe true 
                        :plan_node_id 9 
                        :targetlist (...)
                        :qual (
                           {OPEXPR //OpExpr類型
                           :opno 98 
                           :opfuncid 67 
                           :opresulttype 16 
                           :opretset false 
                           :opcollid 0 
                           :inputcollid 100 
                           :args (
                              {RELABELTYPE 
                              :arg 
                                 {VAR 
                                 :varno 5 //5號RTE,即t_grxx
                                 :varattno 1 //第1個列,即dwbh
                                 :vartype 1043 
                                 :vartypmod 14 
                                 :varcollid 100 
                                 :varlevelsup 0 
                                 :varnoold 5 
                                 :varoattno 1 
                                 :location 124
                                 }
                              :resulttype 25 
                              :resulttypmod -1 
                              :resultcollid 100 
                              :relabelformat 2 
                              :location -1
                              }
                              {CONST 
                              :consttype 25 
                              :consttypmod -1 
                              :constcollid 100 
                              :constlen -1 
                              :constbyval false //非參數傳遞
                              :constisnull false 
                              :location 205 
                              :constvalue 8 [ 32 0 0 0 49 48 48 49 ]//字符串"1001"
                              }
                           )
                           :location -1
                           }
                        )
                        :lefttree <> //子左樹的左樹為空
                        :righttree <> //子左樹的右樹為空
                        :initPlan <> 
                        :extParam (b)
                        :allParam (b)
                        :scanrelid 5//掃描的RTE,5號即t_grxx
                        }
                     :righttree <> //右樹為空
                     :initPlan <> 
                     :extParam (b)
                     :allParam (b)
                     :skewTable 16397 //HashJoin的表Oid
                     :skewColumn 1 //列序號
                     :skewInherit false 
                     :rows_total 0
                     }

LIMIT->SORT->APPEND->appendplans->head->next

子查詢中的第2個NestLoop
參照LIMIT->SORT->APPEND->appendplans->head即可,
條件變為dwbh="1002",其他與鏈表中的head元素無異,不再累述

三、小結

1、計劃樹結構:通過日志輸出分析計劃樹結構;
2、重要的數據結構:RTE、Plan等。

四、附錄

如何開啟跟蹤日志?postgresql.conf配置文件設置參數:

log_destination = 'csvlog'
log_directory = 'pg_log' #與postgresql.conf文件在同一級目錄
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 2d
log_rotation_size = 100MB
#
debug_print_parse = on  #打印parse樹
debug_print_rewritten = on #打印parse rewrite樹
debug_print_plan = on #打印plan樹
debug_pretty_print = on #以pretty方式顯示

感謝你能夠認真閱讀完這篇文章,希望小編分享的“PostgreSQL中PlannedStmt結構的日志分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南郑县| 遂川县| 白山市| 鸡泽县| 新蔡县| 莱西市| 台南市| 彭州市| 静安区| 尖扎县| 都昌县| 娱乐| 诸暨市| 凌海市| 民乐县| 浦江县| 叙永县| 拉萨市| 本溪| 丰镇市| 唐河县| 武宣县| 台山市| 武隆县| 绥江县| 阳新县| 胶南市| 呼玛县| 彭水| 新郑市| 介休市| 成安县| 河北区| 连州市| 和林格尔县| 彰化县| 遂平县| 中宁县| 永修县| 蓬安县| 东乌珠穆沁旗|