Comments 15
Сурово. Но мне кажется это никому не нужно. Сейчас на бд такую жесть вытворяют изза огромных харварных ресурсов, что диву даешься.
Если взять много-много раз «огромных хардварных ресурсов», то внезапно может выясниться, что никакого бюджета не хватает. :)
del.
Красиво, руки почти что потянулись попытаться воспроизвести и сунуть в мониторинг. Но нет — не хорошо, когда в черную магию умеет кто-то один, а поддерживать ее — другим.
Нет ли заходов попроще? Пусть с меньшей точностью, но способных явно указать "эту таблу пора пересобрать"?
Статья хорошая, но почему-то автор обходит вниманием расширение pgstattuple, которое позволяет делать тоже самое, но со 100% точностью.
Как и pgstattuple, эта функция собирает данные страница за страницей и не следует ожидать, что её результат представляет мгновенный снимок всего индекса.На таблице гигабайтного объема это достаточно дорого, плюс…
Функция pgstattuple получает блокировку отношения только для чтения.… блокировки.
>… блокировки.
Какие блокировки? Там уровень блокировки такой же, как и у SELECT. Как раз говорится о том, что блокировок нет и результат может быть не точен. Однако он всё равно будет точнее, чем селект через pg_statistic, ибо статистика может запаздывать, так как автовакуум может задержать на другой таблице/быть отключен/не успевать.
Какие блокировки? Там уровень блокировки такой же, как и у SELECT. Как раз говорится о том, что блокировок нет и результат может быть не точен. Однако он всё равно будет точнее, чем селект через pg_statistic, ибо статистика может запаздывать, так как автовакуум может задержать на другой таблице/быть отключен/не успевать.
я попытался это дело воспроизвести в Firebird. Поначалу, конечно, удивили смешные штуки типа 1<<14, видимо, автор решил выпендриться.
Однако, воспроизвести с первого раза не получилось, т.к. видимо, в первом же скрипте кусок begin/end выполняется не в одной транзакции. Иначе я генерацию кучи версий повторяющимся update объяснить не могу. В Firebird в одной транзакции хоть миллион раз можно сделать апдейт записи, но версия будет только одна.
Вывод — что-то не так в PostgreSQL с версионностью? :-)
Однако, воспроизвести с первого раза не получилось, т.к. видимо, в первом же скрипте кусок begin/end выполняется не в одной транзакции. Иначе я генерацию кучи версий повторяющимся update объяснить не могу. В Firebird в одной транзакции хоть миллион раз можно сделать апдейт записи, но версия будет только одна.
Вывод — что-то не так в PostgreSQL с версионностью? :-)
Sign up to leave a comment.
DBA: «Кто-то слишком много ест!»