172 похожих чатов

Ярослав, добрый вечер! Удалось пообщаться с Федором Сигаевым (напомню, что

это разработчик GIN индекса) касательно ограничений на maintenance_work_mem при CREATE INDEX для GIN (далее речь пойдет только о данном типе индекса), результаты весьма интересные:
1. Начнем с простого — гарантированно CREATE INDEX отработает при maintenance_work_mem не более чем 12GB;
2. Когда я уперся в INT_MAX, как оказалось, речь, в целом, шла не о кол-ве выделенной памяти под CREATE INDEX, а о размере posting list для конкретного частотного слова, то бишь кол-во ссылок на данное слово (право, есть грех, у меня присутствует частотное слово которое встречается более 2ккк раз, на досуге надо будет обязательно от него избавиться);
3. Таким образом, если бы частотного слова не было, то процесс бы успешно завершился, не смотря на то что maintenance_work_mem был бы на порядок больше чем 12GB, потому что каждый отдельно взятый posting list не превышал бы INT_MAX = 12GB;
4. Почему (1) работает? Потому что CREATE INDEX в таком случае сделает построение за несколько циклов "накопить в памяти — сбросить на диск", и в каждом цикле posting list count будет гарантированно влезать в INT_MAX;
5. Почему PostgreSQL при старте не ограничивает maintenance_work_mem <= 12GB довольно просто: потому что данный резерв используется не только для построения индексов GIN, но и для всяких VACUUM и т.д., где больший объем памяти мог бы пригодиться.

Теперь касательно моих наблюдений, не входящих в сессию общения с Сигаевым:
1. Как ни странно, при maintenance_work_mem = 12GB GIN индекс строится на 20-25% быстрее. Но это только в моём конкретном случае, впрочем;
3. Никакой крупной "утечки" не было, индекс в моём случае действительно целиком влезал в RAM (такое поведение также подтвердил Федор);
2. А, ну и всё. Ждем parallel workers для построения индексов не только типа b-tree, а то на одном ядре тяжко.

1 ответов

31 просмотр

Т.е. код мы с Вами прочитали правильно, в общем-то (п.1 — п.3 видно прямо в том коде; про п.4 я просто догадывался, код не смотрел; 5 — логично). Но, вообще, было бы неплохо, если бы это ограничение сняли, как видно. ;) > . Никакой крупной "утечки" не было, индекс в моём случае действительно целиком влезал в RAM А, т.е. posting lists строятся не по одному, получается? Если так — ещё лучше (на эту тему код я вообще не читал). Спасибо за информацию!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта