【发布时间】:2020-10-23 14:51:23
【问题描述】:
在 mview mv 中使用了一个表 t,这是 mview 定义中唯一的表。
create table t (c1 int, ..., c10 int);
-- there is a pk on say c1 column
create materialized view mv as select c1, c2...c10 from t;
---there is a unique index on say c5 and bunch of other indexes on the mview.
创建 mview 而不是使用表 t 的原因是,表每隔几个小时就会被截断并重新加载,我们不希望用户在任何时间点看到一个空表,这就是使用 mview 的原因.
使用“同时刷新物化视图”,此 mview 正在被 API 和最终用户使用。
我有几个问题-
- 每当同时发生 mview 刷新时,pg 是否会创建另一组表和索引并使用原点进行切换?如果否,是否会更新现有数据?
- 如果 mview 的使用量很大,是否会影响刷新过程的性能?反之亦然,如果正在刷新,用户对 mview 的性能是否会受到影响?
- mview 有时会在几分钟内刷新,有时则需要数小时。运行时间长了,没有锁,也没有资源短缺,基表的rec数是6m(7.5gb),不算大,为什么刷新mview这么久?
- mview 是否需要真空/分析/重新索引?
【问题讨论】:
标签: postgresql