postgresql - Autovacuum 不删除死行(并且 xmin 水平与任何会话的 xmin 都不匹配)
问题描述
我有一张有 85% 死行的表,这给我带来了麻烦。我VACUUM (VERBOSE) MY_TABLE
按照这个SO 响应执行,根据结果,当前没有活动会话阻止我的 xmin 水平(所以我看不到我可以终止哪个会话以导致 autovacuum 删除死行)。
结果VACUUM (VERBOSE) MY_TABLE
是这样的:
...
CPU: user: 0.01 s, system: 0.01 s, elapsed: 0.04 s.
INFO: "my_table": found 69454 removable, 364950 nonremovable row versions in 41903 out of 82105 pages
DETAIL: 165590 dead row versions cannot be removed yet, oldest xmin: 3914663626
There were 10532004 unused item pointers.
Skipped 3 pages due to buffer pins, 39715 frozen pages.
...
然后,运行此查询:
SELECT pid, datname, usename, state, backend_xmin
FROM pg_stat_activity
WHERE backend_xmin IS NOT NULL
ORDER BY age(backend_xmin) DESC;
产出:
pid | datname | usename | state | backend_xmin
-------+----------+-----------------+--------+--------------
16664 | my_table | ¤ | active | 3914835133
30837 | my_table | my_user | active | 3915292658
...
所以我看不到任何 xmin 低至3914663626
.
我还尝试了该 SO 答案中的另外两个查询:一个用于准备好的事务和用于复制槽,并且都没有产生任何行。
vacuum
移除那些死行还能带来什么?
(如果你想要VACUUM (VERBOSE) MY_TABLE
让我知道的完整输出,大约是 30 行。)
解决方案
推荐阅读
- php - 如何将多个变量发送到 codeigniter 的视图?
- python - 如何为所有其他导入的模块导入一个模块?
- virtual-machine - Vagrant GuestAdditions 问题
- python - 如何提取具有相同值的段?
- laravel - 如何实现加载资源的 Laravel 模型
- flash - 如何在字符串上列出属性并设置默认值,Error = #1069
- c++ - constexpr 矢量 push_back 或如何 constexpr 所有的东西
- vb.net - DateTime 是否包含第二次闰功能?
- php - PHP 日期格式 - 如果为日期则为日期,如果为空则为空
- javascript - 调整下拉菜单位置