Обсуждение: A small problem when rehashing catalog cache

Поиск
Список
Период
Сортировка

A small problem when rehashing catalog cache

От
"cca5507"
Дата:
Hi,

When we search catalog cache, we move the searched tuple to the front of the list:

```
        /*
         * We found a match in the cache.  Move it to the front of the list
         * for its hashbucket, in order to speed subsequent searches.  (The
         * most frequently accessed elements in any hashbucket will tend to be
         * near the front of the hashbucket's list.)
         */
        dlist_move_head(bucket, &ct->cache_elem);
```

If I understand correctly, we reverse the list in RehashCatCache() and RehashCatCacheLists():

```
    /* Move all entries from old hash table to new. */
    for (i = 0; i < cp->cc_nbuckets; i++)
    {
        dlist_mutable_iter iter;

        dlist_foreach_modify(iter, &cp->cc_bucket[i])
        {
            CatCTup    *ct = dlist_container(CatCTup, cache_elem, iter.cur);
            int            hashIndex = HASH_INDEX(ct->hash_value, newnbuckets);

            dlist_delete(iter.cur);
            dlist_push_head(&newbucket[hashIndex], &ct->cache_elem);
        }
    }
```

Maybe "dlist_push_head" -> "dlist_push_tail"? Thoughts?

--
Regards,
ChangAo Chen

Re: A small problem when rehashing catalog cache

От
"cca5507"
Дата:
Hi,

Although this does not affect correctness, I'd like to propose a patch to fix it.

--
Regards,
ChangAo Chen

Вложения

Re: A small problem when rehashing catalog cache

От
Michael Paquier
Дата:
On Wed, Dec 17, 2025 at 11:12:46AM +0800, cca5507 wrote:
> Although this does not affect correctness, I'd like to propose a
> patch to fix it.

That's an interesting point.

Indeed, the code bothers putting a fresh matching entry at the
beginning of a bucket, and the code does the opposite when moving
entries around, which is inconsistent to say the least.  If we move
the entries at the tail instead as you are suggesting the "freshness"
would be preserved better.  This deserves a comment, at least.

20cb18db4668 has added the RehashCatCache() part, with 473182c9523a
copying the same pattern for RehashCatCacheLists().

Thoughts or opinions from others?
--
Michael

Вложения

Re: A small problem when rehashing catalog cache

От
"cca5507"
Дата:
> This deserves a comment, at least.

How about adding this comment:

We keep recently searched entries at the front of the list, so we should call dlist_push_tail() here.

--
Regards,
ChangAo Chen