2013-11-18 3 views
0

Я ищу оптимизацию запросов в Postgres.Что такое проверка видимости в индексном сканировании

Я не понимаю этого утверждения: Индексные проверки включают случайный доступ к диску и все еще должны читать базовые блоки данных для проверки видимости.

Что означает «проверка видимости» здесь?

ответ

0

PostgreSQL использует метод Multi-Version Concurrency Control для управления одновременным доступом к данным. Данные не отображаются до тех пор, пока транзакция, в которую она вставляется, не зафиксирована. В других случаях данные молча игнорируются для других транзакций, поэтому они не видят этого (за исключением редких случаев, явных блокировок или более высоких уровней изоляции).

Это означает, что PostgreSQL должен проверять идентификатор транзакции фактических строк, чтобы убедиться, что они видны для всех транзакций. Теперь 9.2 (iirc) и выше позволяют PostgreSQL пропустить эту проверку, если все кортежи на странице видны. Однако в противном случае он должен проверять каждую строку.

+1

IIRC Карта видимости на самом деле показывает, видимы ли все кортежи на странице для * всех * транзакций. Таким образом, в основном, если страница содержит только данные, которые предписывают все текущие транзакции, тогда нет необходимости проверять ее видимость. Если вы измените одну строку на этой странице, то флаг не будет настроен для этой страницы. –

+0

Ричард, я думаю, это правильно. –

+0

так, если я это понимаю. Есть некоторые страницы, индексированные ранее. Во время последующего сканирования индексов существует вероятность того, что некоторые из строк, захваченных уже существующим индексом, уже были изменены, но еще не зафиксированы и повторно проиндексированы. Если это подозрение, это означает, что все индексы потенциально ненадежны и требуют проверки видимости, перейдя на жесткий диск. Я уверен, что это не так, из-за неэффективности. поэтому я все еще не уверен, когда эта проверка видимости происходит, и когда она не нужна. – bhomass

Смежные вопросы