Протухает индекс

Редко, но крайне метко протухают индексы. В первый раз - на 9.1, недавно совсем на 9.2.

Выявляется тем, что неожиданно перестает работать запрос по индексированному полю.

Например есть две таблицы A (id, name) и B (id, name, a_id). B ссылается на A по id, поля name в обеих таблицах совпадают, по полю name в таблице A есть индекс (уникальный по Btree).

A
 
1, 'petya'
 
B
 
11, 'petya', 1
12, 'petya', 1

И в какой-то момент запрос [select id from A where name = 'petya'] перестает отдавать результат для значений name, существующих в таблице.

Проверяем, запросив содержимое B по name ('petya'). Получаем строку с идентификатором строки из A (1). По этому идентификатору запрашиваем A и получаем строку с тем значением в name, по которому делали запрос, вернувший пустой результат.

Удаляем индекс по name из A и чудесным образом запрос [select id from A where name = 'petya'] начинает отдавать данные. Пересоздаем индекс и все работает дальше.

Известна ли кому причина?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Если на таблицах выполняется

Если на таблицах выполняется большое количество операций вставки/замены/удаления, то процесс сбора статистики autovacuum может не успевать актуально обновлять статистику по этим таблицам. В этом случае рекомендуется самом с определённой периодичностью запускать VACUUM ANALYZE или VACUUM FULL

На первом сбое действительно

На первом сбое действительно была таблица большая и активно обновляемая.

Но на последнем сбое упал индекс на таблице, куда в сутки попадает около двух сотен строк, а обновляется сотни три - она практически не меняется по сравнению с остальными.

VACUUM ANALYZE пускается раз в сутки.

Попробуйте запускать каждый

Попробуйте запускать каждый час.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023