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

27 просмотров

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

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
Именно что порождает, но при определенных условиях...

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта