2015-06-07 3 views
2

Я пытаюсь оптимизировать свою основную загрузку.Могу ли я заменить 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 

Спасибо!

ответ

3

Да, вы все равно должны ANALYZE к моментальному поколению таблицы статистики после того как вы COPY данных в.

ли кортежи заморожены или нет, не имеют ничего общего со статистикой, это способ избежать позже анти-циклический вакуума Мероприятия.

+0

Это было принятие желаемого за действительное с моей стороны. Это было бы неплохой функцией, но это могло бы сохранить ресурсы сервера, если бы он мог собирать статистику по мере загрузки данных. Спасибо Крейгу. –

+0

@cherio Было бы интересно сделать это, да ... «КОПИРОВАТЬ ... С СТАТИСТИКОЙ». Патчи приветствуются: p –