From: | Thomas Munro <thomas(dot)munro(at)gmail(dot)com> |
---|---|
To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Cc: | Kevin Grittner <kgrittn(at)gmail(dot)com> |
Subject: | Re: old_snapshot_threshold vs indexes |
Date: | 2019-06-25 02:21:31 |
Message-ID: | CA+hUKGJYkaj1OQn5Q=Oeujt+eT3N-u-ZkKvw4jHkd5e34Bmr3A@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Fri, Jun 21, 2019 at 1:21 AM Thomas Munro <thomas(dot)munro(at)gmail(dot)com> wrote:
> I ran into someone with a system where big queries scanning 8GB+ of
> all-in-cache data took consistently ~2.5x longer on a primary server
> than on a replica. Both servers had concurrent activity on them but
> plenty of spare capacity and similar specs. After some investigation
> it turned out that on the primary there were (1) some select()
> syscalls waiting for 1ms, which might indicate contended
> SpinLockAcquire() back-offs, and (2) a huge amount of time spent in:
>
> + 93,31% 0,00% postgres postgres [.] index_getnext
> + 93,30% 0,00% postgres postgres [.] index_fetch_heap
> + 81,66% 0,01% postgres postgres [.] heap_page_prune_opt
> + 75,85% 0,00% postgres postgres [.] TransactionIdLimitedForOldSnapshots
> + 75,83% 0,01% postgres postgres [.] RelationHasUnloggedIndex
> + 75,79% 0,00% postgres postgres [.] RelationGetIndexList
> + 75,79% 75,78% postgres postgres [.] list_copy
On my laptop, all prewarmed, no concurrency, the mere existence of 10
brin indexes causes a sequential scan to take ~5% longer and an
uncorrelated index scan to take ~45% longer (correlated index scans
don't suffer). Here's a draft patch for v13 that fixes that problem
by caching the result of RelationHasUnloggedIndex().
Reproducer scripts also attached. I ran them with shared_buffers=8GB,
old_snapshot_threshold=10s and pg_prewarm installed.
I didn't try to look into the complaint about suspected spinlock contention.
--
Thomas Munro
https://enterprisedb.com
Attachment | Content-Type | Size |
---|---|---|
0001-Cache-the-result-of-RelationHasUnloggedIndex.patch | application/octet-stream | 2.3 KB |
test-seqscan.sql | application/octet-stream | 1.9 KB |
test-indexscan.sql | application/octet-stream | 3.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | yuzuko | 2019-06-25 04:45:19 | Re: Problem with default partition pruning |
Previous Message | Michael Paquier | 2019-06-25 02:19:56 | Re: Prevent invalid memory access in LookupFuncName |