Optimize partial TOAST decompression

Поиск
Список
Период
Сортировка
От Binguo Bao
Тема Optimize partial TOAST decompression
Дата
Msg-id CAL-OGkthU9Gs7TZchf5OWaL-Gsi=hXqufTxKv9qpNG73d5na_g@mail.gmail.com
обсуждение исходный текст
Ответы Re: Optimize partial TOAST decompression  (Andrey Borodin <x4mmm@yandex-team.ru>)
Список pgsql-hackers
Hi, hackers!
I'm a student participating in GSoC 2019 and my project is related to TOAST slices.
When I'm getting familiar with the postgresql codebase, I find that PG_DETOAST_DATUM_SLICE, when to run on a compressed TOAST entry, will fetch all compressed data chunks then extract the relevant slice. Obviously, this is unnecessary, we only need to fetch the data chunks we need.

The patch optimizes partial TOAST decompression.
For an example of the improvement possible, this trivial example:
---------------------------------------------------------------------
create table slicingtest (
id serial primary key,
a text
);

insert into slicingtest (a) select repeat('1234567890-=abcdefghijklmnopqrstuvwxyz', 1000000) as a from generate_series(1,100);
\timing
select sum(length(substr(a, 0, 20))) from slicingtest;
---------------------------------------------------------------------
environment: Linux 4.15.0-33-generic #36~16.04.1-Ubuntu x86_64 GNU/Linux
On master, I get
Time: 28.123 ms (Take ten times average)
With the patch, I get
Time: 2.306 ms  (take ten times average)

This seems to have a 10x improvement. If the number of toast data chunks is more, I believe that patch can play a greater role, there are about 200 related TOAST data chunks for each entry in the case.


Best regards, Binguo Bao.

Вложения

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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: coverage increase for worker_spi
Следующее
От: Tom Lane
Дата:
Сообщение: Residual cpluspluscheck issues