我正在尝试优化我的批量加载例程。
目前我按步骤加载数据(我不遵循下面的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
谢谢!
答案 0 :(得分:3)
是的,在您ANALYZE
数据后,您仍应COPY
强制立即生成表统计信息。
元组是否被冻结与统计无关,这是避免以后反环绕真空活动的一种方法。