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

Всем привет. Кто как борется с большим увеличением записи при заполнении

hint bits?
wiki.postgresql.org/wiki/Hint_Bits

В общих словах симптомы такие.
Есть таблица, в которую идёт постоянный upsert небольшими батчами. Доля update = 70% от insert, а батчи с update и insert всегда в разных транзакциях.
И если в неё только писать, то запись на диск минимальна.

Но стоит включить на этой таблице select-запросы по последним записанным данным, так сразу утилизация полосы записи на диск возрастает в ~15 раз.
По pg_stat_statements видно, что select сопровождается большим количеством dirtied-страниц (12% от read + hit, сами read и hit примерно равны). Однако прирост полосы записи на диск составляет не +12%, а 15 раз.

Какой процесс в основном пишет (по iotop):
wal_writer + checkpointer в разных соотношениях, но ещё и постгресовые читающие бэкэнды.
Но если bgwriter накрутить в активное состояние, то он становится безусловным лидером по объёму записи на диск. Конечно постгресовые читающие бэкэнды перестают при этом писать.

Если глянуть pg_waldump -z, то наибольший Combined size = 14% приходится на Type = XLOG.

Может кто посоветует какие доп. средства для диагностики?

Но если это из-за hint bits, то как можно снизить этот эффект?
Понятно, что вынос читающих запросов на реплику может решить проблему, но хочется более системно подойти к проблеме, а не лечить симптомы.

12 ответов

12 просмотров

вакуум поагрессивнее, чтобы успевал хинты проставить обратно до того как страницы на диск упали

Gennady-K Автор вопроса
Darafei Praliaskouski
вакуум поагрессивнее, чтобы успевал хинты простави...

😻 спасибо. А такое сильное увеличение записи - нормально?

Gennady K
😻 спасибо. А такое сильное увеличение записи - нор...

Ну если горячий датасет в шаред буфферс не влазит, то да, придётся жонглировать

Коллеги, я правильно понял, что SELECT может порождать dirtied-страницы? Я полагал, что только update/delete/truncate на это способны Буду благодарен, если тыкнете в документацию

Alex Yu
Коллеги, я правильно понял, что SELECT может порож...

Нет, select не порождает грязные страницы. Но может вызвать запись на диск в определенных случаях. Посмотрите здесь https://blog.okmeter.io/postgresql-exploring-how-select-queries-can-produce-disk-writes-f36c8bee6b6f или на Хабре цикл статей Егора Рогова для полного понимания ситуации

Valery
Нет, select не порождает грязные страницы. Но мож...

Спасибо Как раз обдумывал как же объяснить разработчику что тысяча апдейтов по одной строчке убивает систему И тут натыкаюсь на нечто мне самому неизвестное

Кроме автовакуума поагрессивнее — можно если знаете, что вот надвигается такое дело, апсерты прошли скоро селекты пойдут — руками вакуум запускать.

Gennady-K Автор вопроса
Alex Yu
Коллеги, я правильно понял, что SELECT может порож...

Это по ссылке в сообщении и можете увидеть экспериментально

Gennady-K Автор вопроса
Ilya Anfimov
Кроме автовакуума поагрессивнее — можно если знает...

Поток апсертов никогда не заканчивается. Но как вариант подходит, конечно

Gennady-K Автор вопроса
Valery
Нет, select не порождает грязные страницы. Но мож...

Именно что порождает, но при определенных условиях. В Вашей ссылке это тоже указано. Попробуйте и увидите сами..

Gennady K
Именно что порождает, но при определенных условиях...

Я не до конца точно выразился. Селект может пометить страницу как грязную при определенных условиях, но изменения данных (порождение грязных страниц) он не делает

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

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

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
> комьюнити я бы не судил по этому чату. Как мы видели по статам просмотров нескольких телеговских постов, то в чате их набивается 30-40 или даже выше, когда как общаются акти...
Constantin F.
4
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
всем трям! Кто-нибудь работал со связкой werf + harbor + trivy ? Во время сборки образа выходит ошибка "PROJECTPOLICYVIOLATION: current image with "Pending" status of vulnerab...
Авессалом
11
Как сделать чтобы short точно был 2 байта, int точно 4 байта ?(без стандартных библиотек, ну типа без int16_t, int32_t)
#
8
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Карта сайта