小编ant*_*t1j的帖子

数据仓库的 DROP TABLE / TRUNCATE 方法是否需要 VACUUM FULL

我们每周都会使用一系列更新数据仓库

TRUNCATE source_table1 
COPY source_table1 FROM [...]
Run Code Online (Sandbox Code Playgroud)

...用于数据导入以及:

DROP TABLE IF EXISTS my_table
CREATE TABLE my_table AS SELECT [...]
Run Code Online (Sandbox Code Playgroud)

用于表更新。

我们以 结束更新过程VACUUM FULL [VERBOSE] ANALYZE,因为正如文档所示,VACUUM应该在更新或删除大量元组时完成更新过程。在这里,由于所有表的份额为 100%,因此我们合理地认为VACUUM应该应用这一点。

正如我们看到 verbose 选项的输出,Postgresql 似乎没什么可做的,正如每个表VACUUMed 给出的那样:

INFO:  vacuuming "public.table345"
INFO:  "table345": found 0 removable, 9831703 nonremovable row versions in 62538 pages
DETAIL : 0 dead row versions cannot be removed yet.
Run Code Online (Sandbox Code Playgroud)

我认为相反,这ANALYZE对于更新内部统计数据更有帮助。大多数表的行数为 10-100m。

但我们想知道在这种情况下是否VACUUM FULL真的VACUUM有必要?

(或者可能整个更新过程(DROP / CREATE TABLE AS)不是正确的方法?)

postgresql vacuum postgresql-9.6

6
推荐指数
1
解决办法
8829
查看次数

当前行日期过去 12 个月的总销售额

我需要根据给定月份的每一行计算给定 client_id 的过去 12 个月的销售额总和。

这是按客户按月汇总的销售额的初始表(此处针对特定客户进行过滤511656A75):

CREATE TEMP TABLE foo AS
SELECT idclient, month_transac, sales
FROM ( VALUES
  ( '511656A75', '2010-06-01',  68.57 ),
  ( '511656A75', '2010-07-01',  88.63 ),
  ( '511656A75', '2010-08-01',  94.91 ),
  ( '511656A75', '2010-09-01',  70.66 ),
  ( '511656A75', '2010-10-01',  28.84 ),
  ( '511656A75', '2015-10-01',  85.00 ),
  ( '511656A75', '2015-12-01', 114.42 ),
  ( '511656A75', '2016-01-01', 137.08 ),
  ( '511656A75', '2016-03-01', 172.92 ),
  ( '511656A75', '2016-04-01', 125.00 ),
  ( '511656A75', '2016-05-01', 127.08 ),
  ( '511656A75', '2016-06-01', 104.17 ), …
Run Code Online (Sandbox Code Playgroud)

postgresql performance join optimization postgresql-9.6 query-performance

5
推荐指数
1
解决办法
4556
查看次数