投稿

3月, 2015の投稿を表示しています

PostgreSQLのコードを読む話(4)

前回はオプティマイザー周りに入ったのでした。
home/postgres/src/backend/optimizer/README

多分 optimizer の planner.c あたりを読み進めると検索プランの作成方法が、 Portal あたり(どこだ?)を読み進めると、検索プランに従って実際に検索を行う処理が見つかる気がする。
今回は Portal の方にあたりをつけて読み進めてみることにする。 CreatePortalhttps://github.com/postgres/postgres/blob/master/src/backend/utils/mmgr/portalmem.c#L196 http://127.0.0.1:9292/home/postgres/src/backend/utils/mmgr/READMEreadmeみるmmgr は Memory Manager っぽいContext単位でメモリ管理をするようなモデルらしい PortalDefineQuery parseされたStatementを受け取っているので、ここで実行? statement 名を設定しているだけだった。。。
PortalStarthttps://github.com/postgres/postgres/blob/master/src/backend/tcop/pquery.c#L436 実行準備とのこと なにやら strategy にしたがって動作している
PortalSetResultFormat 見てない
PortalRun 多分ここが実行。。。 時間切れだったので、次回はここから。 https://github.com/postgres/postgres/blob/master/src/backend/tcop/pquery.c#L706

PostgreSQLのコードを読む話(3)

前回の続き、フロントエンドとバックエンド間の通常操作サブプロトコルのひとつ、Queryを読んでみることにした。

ここから
https://github.com/postgres/postgres/blob/master/src/backend/tcop/postgres.c#L3969
exec_simple_queryに入ったhttps://github.com/postgres/postgres/blob/master/src/backend/tcop/postgres.c#L824
start_xact_command - トランザクション?いったん飛ばすdrop_unnamed_stmt - 名無しのステートメントを除去?一端とばすMemoryContextSwitchTopg_parse_query - クエリをパースしてツリーを作るっぽいコンテキスト戻しているツリーをトラバースしている。。。pg_plan_queries - クエリプラン作成?ここで色々しているとのことPortalってなんだろう?カーソルのことらしいCommandCounterIncrement トランザクション関連らしい。飛ばす
home/postgres/src/backend/access/transam/README トランザクションシステムの説明 pg_plan_queriesからオプティマイザーあたりに入った https://github.com/postgres/postgres/blob/master/src/backend/optimizer/plan/planner.c プラグインでoptimizerのプランナーフックを仕掛けることが可能っぽいpull_up_sublinks - any/existsを内部的にjoinに変形するらしい オプティマイザーの全体を俯瞰した方がよいかと思いREADMEを見るhttps://github.com/postgres/postgres/blob/master/src/backend/optimizer/README#L286 optimizerの動作についての説明がのっていた

時間切れ、次回はここから見ていこう。。。