Каковы доступные варианты для идентификации и удаления недопустимых объектов в Postgres (например: поврежденные индексы) - PullRequest
3 голосов
/ 20 января 2010

Какие доступны опции для идентификации и удаления недействительных объектов в Postgres

Ответы [ 2 ]

3 голосов
/ 25 марта 2015

Если вы имеете в виду обнаружение «недействительных» (плохо созданных) индексов, очевидно, что Postgres может «потерпеть неудачу» при попытке создать индекс, и тогда планировщик запросов не будет их использовать, хотя они существуют в вашей системе. , Этот запрос будет обнаруживать «ошибочные» индексы:

https://www.enterprisedb.com/blog/pgupgrade-bug-invalid-concurrently-created-indexes

SELECT n.nspname, c.relname
FROM   pg_catalog.pg_class c, pg_catalog.pg_namespace n,
       pg_catalog.pg_index i
WHERE  (i.indisvalid = false OR i.indisready = false) AND
       i.indexrelid = c.oid AND c.relnamespace = n.oid AND
       n.nspname != 'pg_catalog' AND
       n.nspname != 'information_schema' AND
       n.nspname != 'pg_toast'

хотя я предполагаю, что обнаружение индексов таблицы TOAST не повредит, поэтому вы можете удалить эту часть запроса:)

В связи с этим, для меня иногда просто запуск свежего ANALYZE для таблицы также приводит к тому, что индексы внезапно начинают использоваться в производственной среде (т. Е. Даже если индексы не являются «недействительными», они могут не использоваться до запуска ANALYZE). Weird.

1 голос
/ 14 мая 2011

Вы пытались запустить vacuum full pg_class как суперпользователь?

Кроме того, авто-вакуум должен позаботиться об этом в конце концов. Ваши объекты кажутся временными таблицами / индексами, и каталог (как правило) обновляется не так часто, как ваши данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...