Я пытаюсь оптимизировать свою основную загрузку.Могу ли я заменить TRUNCATE + COPY + ANALYZE с помощью TRUNCATE + COPY/FREEZE в PostgreSQL 9.3
В настоящее время я загружаю данные шаги (я не следующий синтаксис SQL ниже, просто алгоритм):
BEGIN
TRUNCATE table
COPY into table
ANALYZE table
COMMIT
Перед PostgreSQL 9.3
это был единственный способ рекомендуется повторно загрузить таблицу. Версия 9.3
вводит опцию FREEZE
, которая может использоваться с командой COPY
. Стандартная документация говорит:
FREEZE
Просьба копирование данных с рядами уже заморожен, так же, как они будут после выполнения команды VACUUM FREEZE. Это , предназначенный как опция для начальной загрузки данных. Строки будут заморожены только в том случае, если загруженная таблица была создана или усечена в текущем субтранзакции, нет курсоров, открытых и нет старых снимков, хранящихся в этой транзакции.
Мой ближайший вопрос: должен ли я еще пробежать ANALYZE
после COPY/FREEZE
. Стандартный документ не дает никаких прямых рекомендаций по этому вопросу. Будет ли следующая последовательность достаточна или мне еще нужно запустить ANALYZE
?
BEGIN
TRUNCATE table
COPY/FREEZE table
COMMIT
Спасибо!
Это было принятие желаемого за действительное с моей стороны. Это было бы неплохой функцией, но это могло бы сохранить ресурсы сервера, если бы он мог собирать статистику по мере загрузки данных. Спасибо Крейгу. –
@cherio Было бы интересно сделать это, да ... «КОПИРОВАТЬ ... С СТАТИСТИКОЙ». Патчи приветствуются: p –