Производительность: Создать индексы после или до преобразования из UNLOGGED в LOGGED? - PullRequest
0 голосов
/ 04 февраля 2019

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

Чтобы сделать режим массовой рассылки быстрым, яm, начиная с UNLOGGED таблиц почти без индексов (среди прочего).

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

Мой вопрос: с точки зрения производительности - есть ли разница в порядке создания индексов и перехода на таблицы LOGGED?С точки зрения надежности кажется, что чем быстрее я переключусь на LOGGED, тем лучше (меньше шансов потерять все мои драгоценные данные).Но придется ли мне платить за это вовремя, чтобы создать все индексы?

В моих начальных тестах кажется, что ALTER TABLE x SET LOGGED занимает довольно много времени, чего я не понимаю, потому чтоЯ думал, что это влияет только на операции после него, и само по себе это почти NO-OP.

Мой PG:

PostgreSQL 9.6.11 на x86_64-pc-linux-gnu, скомпилированный gcc (GCC) 7.3.0, 64-битный

, хотя я спрашиваю более широко.Любые ссылки на вещи, которые помогут мне понять, что именно происходит с UNLOGGED и LOGGED (особенно в сочетании с указаниями), также приветствуются.

1 Ответ

0 голосов
/ 04 февраля 2019

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

Преимущество незарегистрированных таблицв том, что WAL (журнал транзакций) не записывается.Но когда вы превратите незарегистрированную таблицу в зарегистрированную, будет записана WAL для полной таблицы и ее индексов .Это необходимо, потому что теперь PostgreSQL должен иметь возможность восстанавливать таблицу в случае сбоя.

Ваша выгода в том, что WAL будет записываться по блокам вместо строки за строкой.

Незамеченные таблицы становятся большим преимуществом, если вам приходится изменять данные между временем загрузки таблицы и превращением ее в зарегистрированную.Все эти модификации не должны быть зарегистрированы в WAL.

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