Данные кеша Postgres (shared_buffers) отсортированы по индексам? - PullRequest
0 голосов
/ 22 марта 2019

Я не очень хорошо разбираюсь в Postgres, так что терпите меня.

Поскольку при индексации таблицы физически она не упорядочивается на диске в соответствии с индексом, мой вопрос - упорядочено ли содержимое shared_buffers в соответствии с ней?

1 Ответ

2 голосов
/ 22 марта 2019

Когда PostgreSQL необходимо прочитать блок 8K, он находит первый доступный чистый буфер с счетчиком использования 0 и загружает в него блок. Таким образом, блоки (индекс или таблица) находятся в общих буферах случайным образом.

Это не должно иметь значения, поскольку в наши дни память - это произвольный доступ.

Согласно вашему комментарию вы действительно хотите знать, на что влияет команда CLUSTER:

CLUSTER переписывает таблицу так, чтобы строки физически упорядочивались на диске в логическом порядке индекса. В пределах одного блока это упорядочение будет сохранено, когда данные находятся в общих буферах (поскольку блок копируется в память как есть). Но разные блоки таблиц не будут помещаться в общие буферы близко друг к другу или в каком-либо определенном порядке.

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

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