Re: Bug #652: NAMEDATALEN limitations

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Bug #652: NAMEDATALEN limitations
Дата
Msg-id 21990.1020197073@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Bug #652: NAMEDATALEN limitations  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
I said:
> One possible theory is that if NAMEDATALEN isn't a multiple of
> sizeof(int), the compiler's idea of sizeof(NameData) will probably be
> NAMEDATALEN rounded up to the next multiple of sizeof(int).

For the record, this does indeed seem to be the root cause for Erik's
complaint.  relcache.c declares the key size for its relation name
cache index as sizeof(NameData) --- so if that's larger than NAMEDATALEN
the hashtable code will end up trying to compare pad bytes that
probably haven't been zeroed out.

It looks to me like it would not really be practical to expect the
system to work when sizeof(NameData) is different from NAMEDATALEN;
we could maybe eliminate the existing discrepancies but more would
surely creep in.  So I've added comments to document that NAMEDATALEN
must be a multiple of sizeof(int).

BTW, I suspect that Names used as hashtable keys may explain the
residual speed differences that people have been reporting for large
values of NAMEDATALEN.  The dynahash.c code assumes fixed-length keys
and will compare all bytes out to the specified length, no matter what
--- so the extra cycles may all be spent in key comparisons for
dynahash tables.  Perhaps this could be fixed.

            regards, tom lane

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Bug #652: NAMEDATALEN limitations
Следующее
От: Edward Pilipczuk
Дата:
Сообщение: Re: Bug #640: ECPG: inserting float numbers