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 ответов

9 просмотров

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

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
А с каким компилятором не будет ошибкой использовать асм вставки?
Replicant ~
14
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Всем привет! Подскажите, как решить проблему или из-за чего это происходит. У меня есть проблема в WebStorm (v.2024.1.3): я ставлю любую тему, и через какое-то время меняется ...
Alexander Sheigov
5
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
И из-за этого сужается карман. Нет свободного полёта. Они либо могут какой-то заточенный прикладной софт, либо какой-то простой системный написать. По шаблону. А, допустим, по...
КТ315
0
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Карта сайта