Re: Pluggable Storage - Andres's take
Amit Khandekar <amitdkhan.pg@gmail.com>
Attachments
- prefetch_xid_horizon_scan_v2.patch (application/octet-stream) patch v2
On Thu, 21 Feb 2019 at 18:06, Robert Haas <robertmhaas@gmail.com> wrote: > > On Thu, Feb 21, 2019 at 6:44 AM Amit Khandekar <amitdkhan.pg@gmail.com> wrote: > > Ok, so something like XidHorizonPrefetchState ? On similar lines, does > > prefetch_buffer() function name sound too generic as well ? > > Yeah, that sounds good. > And, yeah, then maybe rename the function too. Renamed the function to xid_horizon_prefetch_buffer(). > > > > +/* > > > + * An arbitrary way to come up with a pre-fetch distance that grows with io > > > + * concurrency, but is at least 10 and not more than the max effective io > > > + * concurrency. > > > + */ > > > > > > This comment is kinda useless, because it only tells us what the code > > > does (which is obvious anyway) and not why it does that. Saying that > > > your formula is arbitrary may not be the best way to attract support > > > for it. > > > > Well, I had checked the way the number of drive spindles > > (effective_io_concurrency) is used to calculate the prefetch distance > > for bitmap heap scans (ComputeIoConcurrency). Basically I think the > > intention behind that method is to come up with a number that makes it > > highly likely that we pre-fetch a block of each of the drive spindles. > > But I didn't get how that exactly works, all the less for non-parallel > > bitmap scans. Same is the case for the pre-fetching that we do here > > for xid-horizon stuff, where we do the block reads sequentially. Me > > and Andres discussed this offline, and he was of the opinion that this > > formula won't help here, and instead we just keep a constant distance > > that is some number greater than effective_io_concurrency. I agree > > that instead of saying "arbitrary" we should explain why we have done > > that, and before that, come up with an agreed-upon formula. > > Maybe something like: We don't use the regular formula to determine > how much to prefetch here, but instead just add a constant to > effective_io_concurrency. That's because it seems best to do some > prefetching here even when effective_io_concurrency is set to 0, but > if the DBA thinks it's OK to do more prefetching for other operations, > then it's probably OK to do more prefetching in this case, too. It > may be that this formula is too simplistic, but at the moment we have > no evidence of that or any idea about what would work better. Thanks for writing it down for me. I think this is good-to-go as a comment; so I put this as-is into the patch. > > > > + for (i = prefetch_state->next_item; i < nitems && count < prefetch_count; i++) > > > > > > It looks strange to me that next_item is stored in prefetch_state and > > > nitems is passed around as an argument. Is there some reason why it's > > > like that? > > > > We could keep the max count in the structure itself as well. There > > isn't any specific reason for not keeping it there. It's just that > > this function prefetch_state () is not a general function for > > maintaining a prefetch state that spans across function calls; so we > > might as well just pass the max count to that function instead of > > having another field in that structure. I am not inclined specifically > > towards either of the approaches. > > All right, count me as +0.5 for putting a copy in the structure. Have put the nitems into the structure. Thanks for the review. Attached v2. -- Thanks, -Amit Khandekar EnterpriseDB Corporation The Postgres Database Company
Commits
-
Add default_table_access_method to postgresql.conf.sample.
- 3a5c08aa0267 12.0 landed
- f7db0ac7d5b6 13.0 landed
-
tableam: Avoid relying on relation size to determine validity of tids.
- 147e3722f7e5 12.0 landed
-
tableam: Don't assume that every AM uses md.c style storage.
- 7f44ede59414 12.0 landed
-
Allow pg_class xid & multixid horizons to not be set.
- fdc7efcc30b1 12.0 landed
-
Fix slot type issue for fuzzy distance index scan over out-of-core table AM.
- b8b94ea129ff 12.0 cited
-
tableam: comment and formatting fixes.
- 6421011ea24d 12.0 landed
-
table: docs: fix typos and grammar.
- 86cc06d1cf9c 12.0 landed
-
tableam: basic documentation.
- b73c3a11963c 12.0 landed
-
Only allow heap in a number of contrib modules.
- 4b82664156c2 12.0 landed
-
tableam: Add table_finish_bulk_insert().
- d45e40158623 12.0 landed
-
tableam: sample scan.
- 73c954d24896 12.0 landed
-
tableam: bitmap table scan.
- bfbcad478f05 12.0 landed
-
tableam: Move heap specific logic from estimate_rel_size below tableam.
- 696d78469f37 12.0 landed
-
tableam: VACUUM and ANALYZE support.
- 737a292b5de2 12.0 landed
-
tableam: relation creation, VACUUM FULL/CLUSTER, SET TABLESPACE.
- d25f519107bf 12.0 landed
-
tableam: Support for an index build's initial table scan(s).
- 2a96909a4a8c 12.0 landed
-
tableam: Add table_get_latest_tid, to wrap heap_get_latest_tid.
- 2e3da03e9ee4 12.0 landed
-
tableam: Add helper for indexes to check if a corresponding table tuples exist.
- 71bdc99d0d7c 12.0 landed
-
tableam: Add and use table_fetch_row_version().
- 9a8ee1dc650b 12.0 landed
-
tableam: Use in CREATE TABLE AS and CREATE MATERIALIZED VIEW.
- 919e48b94301 12.0 landed
-
Ensure sufficient alignment for ParallelTableScanDescData in BTShared.
- 8cacea7a7251 12.0 landed
-
Don't reuse slots between root and partition in ON CONFLICT ... UPDATE.
- 277cb789836b 12.0 landed
-
Use a virtual rather than a heap slot in two places where that suffices.
- 70b9bda65f81 12.0 landed
-
Store tuples for EvalPlanQual in slots, rather than as HeapTuples.
- ad0bda5d24ea 12.0 landed
-
Use slots in trigger infrastructure, except for the actual invocation.
- ff11e7f4b9ae 12.0 landed
-
Store table oid and tuple's tid in tuple slots directly.
- b8d71745eac0 12.0 landed
-
Allow to use HeapTupleData embedded in [Buffer]HeapTupleTableSlot.
- 5408e233f066 12.0 landed
-
Add ExecStorePinnedBufferHeapTuple.
- 8aa02b52db11 12.0 landed
-
Add ArchiveOpts to pass options to ArchiveEntry
- f831d4accda0 12.0 cited
-
Rename RelationData.rd_amroutine to rd_indam.
- 346ed70b0ad7 12.0 landed
-
Rephrase references to "time qualification".
- ebcc7bf949ba 12.0 landed
-
Move remaining code from tqual.[ch] to heapam.h / heapam_visibility.c.
- c91560defc57 12.0 landed
-
Move generic snapshot related code from tqual.h to snapmgr.h.
- b7eda3e0e334 12.0 landed
-
Remove superfluous tqual.h includes.
- e7cc78ad43eb 12.0 landed
-
Don't duplicate parallel seqscan shmem sizing logic in nbtree.
- 90525d7b4e0f 12.0 landed
-
Move vacuumlazy.c into access/heap.
- 285d8e12055f 12.0 landed
-
Support parallel bitmap heap scans.
- f35742ccb7aa 10.0 cited