Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[idea] SELECT * INTO xxx ダイレクトモード #846

Open
kaigai opened this issue Oct 25, 2024 · 1 comment
Open

[idea] SELECT * INTO xxx ダイレクトモード #846

kaigai opened this issue Oct 25, 2024 · 1 comment
Labels
future action needs fix / improvement of external component

Comments

@kaigai
Copy link
Contributor

kaigai commented Oct 25, 2024

基本、PG-Stromは大量のデータから少数のレコードを検索する、あるいはGROUP BYで集約するワークロードが中心。
大量の行を入力して、大量の行を出力するのは苦手。
⇒なぜなら、書き込み側でCPU・I/Oボトルネックが発生するため。

では、GpuScan / GpuJoin の結果を、そのままGDSの書き込みモードでストレージに書き出せばどうか。
空テーブルへの追記ONLYのパターンであれば、並行トランザクションの問題は発生しなさそう。
⇒それを行うのは SELECT INTO のパターン(完全排他ロック下で空テーブルへの書き込みを行う)

検討課題

  • どのタイミングで、どういう風に実行計画を乗っ取るか。
  • SELECT INTOは、以下のような挙動になる。
    • 新しいテーブルを作成する(Access Exclusiveロック)
    • データソースの読み出し(SCAN/JOIN)
    • 当該テーブルに対する追記
postgres=# explain select * into hogehoge from testdata where memo like '%abc%';
                                         QUERY PLAN
--------------------------------------------------------------------------------------------
 Gather  (cost=1100.00..3901.16 rows=39 width=106)
   Workers Planned: 2
   ->  Parallel Custom Scan (GpuScan) on testdata  (cost=100.00..2897.26 rows=16 width=106)
         GPU Projection: id, memo
         GPU Scan Quals: (memo ~~ '%abc%'::text) [rows: 400001 -> 16]
         GPU-Direct SQL: enabled (N=2,GPU0,1)
(6 rows)

これの Gather のあとを乗っ取るには?⇒要調査

@kaigai kaigai added the future action needs fix / improvement of external component label Oct 25, 2024
@kaigai
Copy link
Contributor Author

kaigai commented Oct 25, 2024

トランザクションログからの復旧ができないので、このモードを使用する場合は、SELECT INTOした先のテーブルは UNLOGGED テーブルでなければならない。

ただ、別のソーステーブルから作り出すテーブルであれば、クラッシュ時のリカバリ不能に関してはそれほど大きな問題かどうかは微妙なところかも…。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
future action needs fix / improvement of external component
Projects
None yet
Development

No branches or pull requests

1 participant