Re: Microvacuum support for Hash Index

Jesper Pedersen <jesper.pedersen@redhat.com>

From: Jesper Pedersen <jesper.pedersen@redhat.com>
To: Ashutosh Sharma <ashu.coek88@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2017-01-19T13:43:56Z
Lists: pgsql-hackers
Hi Ashutosh,

On 01/10/2017 08:40 AM, Jesper Pedersen wrote:
> On 01/10/2017 05:24 AM, Ashutosh Sharma wrote:
>> Thanks for reporting this problem. It is basically coming because i
>> forgot to unpin the bucketbuf in hash_xlog_vacuum_one_page(). Please
>> find the attached v5 patch that fixes the issue.
>>
>
> The crash is now fixed, but the
>
> --- test.sql ---
> \set id random(1,10)
> \set val random(0,10)
> BEGIN;
> UPDATE test SET val = :val WHERE id = :id;
> COMMIT;
> --- test.sql ---
>
> case gives
>
> client 6 aborted in command 3 of script 0; ERROR:  deadlock detected
> DETAIL:  Process 14608 waits for ShareLock on transaction 1444620;
> blocked by process 14610.
> Process 14610 waits for ShareLock on transaction 1444616; blocked by
> process 14608.
> HINT:  See server log for query details.
> CONTEXT:  while rechecking updated tuple (12,3) in relation "test"
> ...
>
> using pgbench -M prepared -c 10 -j 10 -T 300 -f test.sql test
>

I'm not seeing this deadlock with just the WAL v8 patch applied.

Best regards,
  Jesper



Commits

  1. Fixes for single-page hash index vacuum.

  2. Port single-page btree vacuum logic to hash indexes.

  3. Avoid core dump for empty prepared statement in an aborted transaction.

  4. Change representation of statement lists, and add statement location info.