象と戯れ

 | 

2010-04-05

Planner <-> Executor -- reading FDW

01:18 | Planner  Executor -- reading FDW - 象と戯れ を含むブックマーク はてなブックマーク - Planner  Executor -- reading FDW - 象と戯れ

また訳あってFDWを読んでたんですね。こないだ引っこ抜いたパッチのままで古いですけど。

pgOpenからSQLの逆パースのところ。かなり頑張ってプランツリーからリモートに発行するSQLを組み立て直しています。以前cluster-hackersで「MySQLのストレージプラグインよりもエグゼキュータをプラガブルにするこのFDWの方が優れている、なぜならばWHERE句をローカルで実行するかリモートで実行するかといった問題に柔軟に対応できるからだ」というような説明がされていて、それはそれで正しいのだけど、このままでいいのかな、という懸念が沸いてきました。

というのも、このpgOpenというのはエグゼキュータの初期化、ExecInitNodeで呼ばれるわけなんですが、既にプランは組み上がってしまっているので最適化が中途半端に終わりそうな匂いがしています。具体例を示せ、と言われても今のところ特にないのですが、先日のWindow関数パッチを出したときにエグゼキュータでゴリゴリやってたらTom Laneから「何をするかを決定するのはプランナのタスクでエグゼキュータは決まった事を遂行するだけにしなさい」という教えを貰い、これが頭にこびりついているものですから、うーん、となっております。

だからといってプランナにFDWのフックを入れるとなるとこれは大仕事な上にDMLと同じで相手がPGじゃないときにどうするんだとか余計な悩みが増えるのも事実です。現実的にSQL/MEDを実装するためにはエグゼキュータで完結した方がいいような気もするのですが実際にレビュー/コミットする人間が首を縦に振るかな?というのも現実問題だったりします(あ、コミットはできるのか)。

悩ましいのでこの問題には一旦フタをして、自分はとりあえずリモートPGありきなプランナ改造に挑む次第です。

 |