Re: Write Ahead Logging for Hash Indexes
Jesper Pedersen <jesper.pedersen@redhat.com>
From: Jesper Pedersen <jesper.pedersen@redhat.com>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Jeff Janes <jeff.janes@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2016-09-12T16:54:08Z
Lists: pgsql-hackers
Hi, On 09/07/2016 05:58 AM, Amit Kapila wrote: > Okay, I have fixed this issue as explained above. Apart from that, I > have fixed another issue reported by Mark Kirkwood upthread and few > other issues found during internal testing by Ashutosh Sharma. > > The locking issue reported by Mark and Ashutosh is that the patch > didn't maintain the locking order while adding overflow page as it > maintains in other write operations (lock the bucket pages first and > then metapage to perform the write operation). I have added the > comments in _hash_addovflpage() to explain the locking order used in > modified patch. > > During stress testing with pgbench using master-standby setup, we > found an issue which indicates that WAL replay machinery doesn't > expect completely zeroed pages (See explanation of RBM_NORMAL mode > atop XLogReadBufferExtended). Previously before freeing the overflow > page we were zeroing it, now I have changed it to just initialize the > page such that the page will be empty. > > Apart from above, I have added support for old snapshot threshold in > the hash index code. > > Thanks to Ashutosh Sharma for doing the testing of the patch and > helping me in analyzing some of the above issues. > > I forgot to mention in my initial mail that Robert and I had some > off-list discussions about the design of this patch, many thanks to > him for providing inputs. > Some initial feedback. README: +in_complete split flag. The reader algorithm works correctly, as it will scan What flag ? hashxlog.c: hash_xlog_move_page_contents hash_xlog_squeeze_page Both have "bukcetbuf" (-> "bucketbuf"), and + if (BufferIsValid(bukcetbuf)); -> + if (BufferIsValid(bucketbuf)) and indent following line: LockBufferForCleanup(bukcetbuf); hash_xlog_delete has the "if" issue too. hash.h: Move the XLog related content to hash_xlog.h Best regards, Jesper
Commits
-
Add a regression test for snapshot too old with hash indexes.
- 42bdaebf1618 10.0 landed
-
hash: Add write-ahead logging support.
- c11453ce0aea 10.0 landed
-
Improve coding in _hash_addovflpage.
- e898437460f5 10.0 cited
-
Remove _hash_wrtbuf() in favor of calling MarkBufferDirty().
- 25216c989384 10.0 cited
-
Improve hash index bucket split behavior.
- 6d46f4783efe 10.0 cited