Re: Parallel copy
vignesh C <vignesh21@gmail.com>
From: vignesh C <vignesh21@gmail.com>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Amit Kapila <amit.kapila16@gmail.com>, "Hou,
Zhijie" <houzj.fnst@cn.fujitsu.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, Rafia Sabih <rafia.pghackers@gmail.com>,
Ashutosh Sharma <ashu.coek88@gmail.com>, Andres Freund <andres@anarazel.de>, Robert Haas <robertmhaas@gmail.com>, Ants Aasma <ants@cybertec.at>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, Alastair Turner <minion@decodable.me>, Thomas Munro <thomas.munro@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-10-27T15:26:41Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow WaitLatch() to be used without a latch.
- 733fa9aa51c5 14.0 cited
-
Add %P to log_line_prefix for parallel group leader
- b8fdee7d0ca8 14.0 cited
-
Include replication origins in SQL functions for commit timestamp
- b1e48bbe64a4 14.0 cited
-
Avoid useless buffer allocations during binary COPY FROM.
- cd22d3cdb9bd 14.0 cited
Thanks Heikki for reviewing and providing your comments. Please find my thoughts below. On Fri, Oct 23, 2020 at 2:01 PM Heikki Linnakangas <hlinnaka@iki.fi> wrote: > > I had a brief look at at this patch. Important work! A couple of first > impressions: > > 1. The split between patches > 0002-Framework-for-leader-worker-in-parallel-copy.patch and > 0003-Allow-copy-from-command-to-process-data-from-file.patch is quite > artificial. All the stuff introduced in the first is unused until the > second patch is applied. The first patch introduces a forward > declaration for ParallelCopyData(), but the function only comes in the > second patch. The comments in the first patch talk about > LINE_LEADER_POPULATING and LINE_LEADER_POPULATED, but the enum only > comes in the second patch. I think these have to merged into one. If you > want to split it somehow, I'd suggest having a separate patch just to > move CopyStateData from copy.c to copy.h. The subsequent patch would > then be easier to read as you could see more easily what's being added > to CopyStateData. Actually I think it would be better to have a new > header file, copy_internal.h, to hold CopyStateData and the other > structs, and keep copy.h as it is. > I have merged 0002 & 0003 patch, I have moved few things like creation of copy_internal.h, moving of CopyStateData from copy.c into copy_internal.h into 0001 patch. > 2. This desperately needs some kind of a high-level overview of how it > works. What is a leader, what is a worker? Which process does each step > of COPY processing, like reading from the file/socket, splitting the > input into lines, handling escapes, calling input functions, and > updating the heap and indexes? What data structures are used for the > communication? How does is the work synchronized between the processes? > There are comments on those individual aspects scattered in the patch, > but if you're not already familiar with it, you don't know where to > start. There's some of that in the commit message, but it needs to be > somewhere in the source code, maybe in a long comment at the top of > copyparallel.c. > Added it in copyparallel.c > 3. I'm surprised there's a separate ParallelCopyLineBoundary struct for > every input line. Doesn't that incur a lot of synchronization overhead? > I haven't done any testing, this is just my gut feeling, but I assumed > you'd work in batches of, say, 100 or 1000 lines each. > Data read from the file will be stored in DSM which is of size 64k * 1024. Leader will parse and identify the line boundary like which line starts from which data block, what is the starting offset in the data block, what is the line size, this information will be present in ParallelCopyLineBoundary. Like you said, each worker processes WORKER_CHUNK_COUNT 64 lines at a time. Performance test results run for parallel copy are available at [1]. This is addressed in v9 patch shared at [2]. [1] https://www.postgresql.org/message-id/CALj2ACWeQVd-xoQZHGT01_33St4xPoZQibWz46o7jW1PE3XOqQ%40mail.gmail.com [2] - https://www.postgresql.org/message-id/CALDaNm1cAONkFDN6K72DSiRpgqNGvwxQL7TjEiHZ58opnp9VoA@mail.gmail.com Regards, Vignesh EnterpriseDB: http://www.enterprisedb.com