Den*_*sov 5 postgresql postgresql-9.6 autovacuum
我将 9.4 postgresql 集群升级到 9.6。(通过 pg_upgrade,所以我的 db stats 没有移动到新集群)我有一个大表(大约 450M 记录)。这个表在我的代码中经常使用(很多选择和更少的 upserts)。当我启动我的 postgres 服务时,Postgres 会自动启动 autovacuum,它会锁定我的桌子。所以我不能做任何事情:既不截断表也不手动分析它。我试图在我的配置文件中设置 autovacuum=off,但它没有帮助(为什么?!我当然重新启动了服务器)
更新:我的目标是尽快开始使用该表。截断会有所帮助(因为表将是空的),分析应该会有所帮助(Postgres 将开始使用适当的索引)
什么是最快的方法:1)截断表或 2)分析表?任何帮助将非常感激。
更新: 这是查看锁的查询的输出:
SELECT psa.pid,granted,query FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where locktype='relation';
pid | granted | query
-------+---------+---------------------------
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
Run Code Online (Sandbox Code Playgroud)
当我从 psql 控制台分析表并查看来自 pg_stat_activity 的数据时:
query | backend_start | xact_start | query_start | state_change | state | wait_event_type | wait_event
analyze ig_tasks_users;| 2017-01-19 10:03:30.287791+01 | 2017-01-19 10:07:11.683817+01 | 2017-01-19 10:07:11.683817+01 | 2017-01-19 10:07:11.683822+01 | active | Lock | relation
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我的 VACUUM ANALYZE 会锁定表,而我的手动 ANALYZE 任务会被锁定。(那正确吗?)
在一个会话中运行 truncate 并让它继续工作,然后打开新连接并终止所有其他会话pg_terminate_backend(pid)。记住
truncate将从表中删除所有数据| 归档时间: |
|
| 查看次数: |
10353 次 |
| 最近记录: |