我有一个物化视图,大约需要57秒才能创建,我使用的是PostgreSQL 9.4。
当我对表进行插入时,触发器将调用触发器函数,该函数将执行REFRESH MATERIALIZED VIEW CONCURRENTLY view
触发器触发after each statement
(插入、更新、删除)
所发生的是,做一个插入,它将需要大约57秒。
如何解决这个问题,并仍然使用物化视图?
我已经实现了很长时间,从来没有这个问题,最近我增加了保镖,这可能是原因吗?
发布于 2015-03-15 04:14:00
通常,只有在对底层表的写访问是罕见的情况下,立即刷新MV才是合理的。语句级触发器比行级触发器要好,但对于大表来说可能仍然太多。我会考虑一种解决方案,每n分钟轮询一次数据库,检查更新。您可以让触发器写入带有单个行的表。
只要您想立即传播每个更改(几乎),在插入/更新/删除写入手工编织的“物化视图”(一个表)(如@trygvis建议 )上的行级触发器可能会更好。
由于pgbouncer使会话保持打开状态,因此可能存在未提交事务的锁定问题,从而减慢了进程,但我只是在这里推测。您可以在数据库的副本中运行测试,而不需要pgbouncer。或者通过查找pg_stat_activity
来检查僵尸事务。
https://dba.stackexchange.com/questions/95214
复制相似问题