Re: [HACKERS] Write Ahead Logging for Hash Indexes

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: [HACKERS] Write Ahead Logging for Hash Indexes
Дата
Msg-id CA+Tgmoa0g0-cj8f7Xc5T=NoCwQtVPkftOZaUnwoQj1Jah4z7Ew@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [HACKERS] Write Ahead Logging for Hash Indexes  (Amit Kapila <amit.kapila16@gmail.com>)
Ответы Re: [HACKERS] Write Ahead Logging for Hash Indexes  (Amit Kapila <amit.kapila16@gmail.com>)
Список pgsql-hackers
On Thu, Feb 16, 2017 at 8:16 PM, Amit Kapila <amit.kapila16@gmail.com> wrote:
> Attached are refactoring patches.  WAL patch needs some changes based
> on above comments, so will post it later.

After some study, I have committed 0001, and also committed 0002 and
0003 as a single commit, with only minor tweaks.

I haven't made a full study of 0004 yet, but I'm a bit concerned about
a couple of the hunks, specifically this one:

@@ -985,9 +962,9 @@ _hash_splitbucket_guts(Relation rel,
                if (PageGetFreeSpace(npage) < itemsz)                {
-                    /* write out nbuf and drop lock, but keep pin */
-                    MarkBufferDirty(nbuf);
+                    /* drop lock, but keep pin */                    LockBuffer(nbuf, BUFFER_LOCK_UNLOCK);
+                    /* chain to a new overflow page */                    nbuf = _hash_addovflpage(rel, metabuf,
nbuf,
(nbuf == bucket_nbuf) ? true : false);                    npage = BufferGetPage(nbuf);

And also this one:

@@ -1041,17 +1024,6 @@ _hash_splitbucket_guts(Relation rel,     * To avoid deadlocks due to locking order of buckets,
firstlock the old     * bucket and then the new bucket.     */
 
-    if (nbuf == bucket_nbuf)
-    {
-        MarkBufferDirty(bucket_nbuf);
-        LockBuffer(bucket_nbuf, BUFFER_LOCK_UNLOCK);
-    }
-    else
-    {
-        MarkBufferDirty(nbuf);
-        _hash_relbuf(rel, nbuf);
-    }
-    LockBuffer(bucket_obuf, BUFFER_LOCK_EXCLUSIVE);    opage = BufferGetPage(bucket_obuf);    oopaque =
(HashPageOpaque)PageGetSpecialPointer(opage);
 

I haven't quite grasped what's going on here, but it looks like those
MarkBufferDirty() calls didn't move someplace else, but rather just
vanished.  That would seem to be not good.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: [HACKERS] PATCH: two slab-like memory allocators
Следующее
От: Robert Haas
Дата:
Сообщение: Re: [HACKERS] Creation of "Future" commit fest, named 2017-07