|
Постгре начинает тормозить на запросе при пороговом значении limit
|
|||
---|---|---|---|
#18+
А, правильно ли я понимаю, что dirtied - это чтение "мертвых" страниц, не удаленных vacuum? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 22:25 |
|
Постгре начинает тормозить на запросе при пороговом значении limit
|
|||
---|---|---|---|
#18+
MegabyteКоллеги, подскажите, а в Explain в: Код: sql 1.
Что означают последние 2 блока: dirtied, written? Что обозначают hit, read, я в курсе. В Postgres-e информация о видимости записей хранится в заголовках самих записей. И также есть commit log, в котором хранится состояние транзакций. Если происходит rollback транзакции которая, к примеру, поменяла много записей, то просто меняется статус транзакции в commit log-е — rollback быстрый, но с “отложенной” работой. Первый же запрос, который потом обращается к таким записям видит, что 1. транзакция откачена 2. у записей не выставлены биты видимости (эти биты нужны для скорости, чтобы все следующие запросы не лезли в commit log) И он, проверив статус транзакции в commit log-е, меняет биты видимости в заголовке записи. Т.е. даже если это SELECT, он меняет данные. Изменения происходят в кэше (shared_buffers), изменённые блоки помечаются как грязные (dirty), т.е. требуют синхронизации с диском. Если запросу нужно прочитать данные в кэш — а в Postgres-е всё взаимодействие происходит через кэш (в отличии от, скажем, ORACLE) — и в кэше нет свободного места, то происходит вытеснение самой “ненужной” страницы. Если при этом страница грязная, то её сначала надо сохранить на диск, т.е. даже SELECT может неожиданно начать писать (write) данные на диск. Одно с другим не связано, т.е. могут быть только dirtied блоки при исполнении запроса, без written. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 22:38 |
|
Постгре начинает тормозить на запросе при пороговом значении limit
|
|||
---|---|---|---|
#18+
Благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2018, 14:52 |
|
Постгре начинает тормозить на запросе при пороговом значении limit
|
|||
---|---|---|---|
#18+
vyegorov а в Postgres-е всё взаимодействие происходит через кэш (в отличии от, скажем, ORACLE) Дополню коллегу для автора темы. Под обсуждением перевода яндекс почты с оракла на постгрескл в комментариях звучит неприкрытая боль. "Под нашей нагрузкой postgres по I/O проигрывал в 4 раза. И как показал PGCon 2016, разработчики postgres'а в курсе всех проблем. Например, нельзя отдать без малого всю память под разделяемый кэш, потому что алгоритм вытеснения буфера очень паршивый. Приходится активно использовать page cache, которым сложно управлять + двойное кэширование. Или нет нормального асинхронного I/O, потому что поддерживается 100500 платформ, во многих из которых этого и близко нет". Плюс еще одна хорошая статья для автора темы от 2013-го года, старая, но краткая, Postgres. Как устроено кеширование. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 19:59 |
|
Постгре начинает тормозить на запросе при пороговом значении limit
|
|||
---|---|---|---|
#18+
Megabyte, Вот тут еще отличное обсуждение, как наличие реплик заставляет делать автовакуум агрессивнее . Это не сейчас Вам, но на будущее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2018, 20:00 |
|
|
start [/forum/topic.php?fid=53&msg=39683948&tid=1995641]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 152ms |
0 / 0 |