And*_*nic 8 postgresql aws postgresql-9.5 autovacuum
我有一个相当大的表(100 万行),我的数据库卡在这个表上的自动清理(> 30 分钟)上,导致整个数据库阻塞。应用程序现在甚至不会加载。
-00:37:31.137859 autovacuum: VACUUM public.users
Run Code Online (Sandbox Code Playgroud)
SELECT n_tup_del, n_tup_upd FROM pg_stat_all_tables WHERE relname = 'users';
Run Code Online (Sandbox Code Playgroud)
这些是我的用户表上的 autovacuum 设置:
-00:37:31.137859 autovacuum: VACUUM public.users
Run Code Online (Sandbox Code Playgroud)
我从慢 PostgreSQL 性能中使用的这些建议设置?不要忘记清空你的数据库
我只需要等待吗?我有哪些选择?
更新
我已升级到 Postgres 9.5,并将我的 RDS IOPS 增加到 900,并且真空过程仍然使 IOPS 达到最大值并且无法对数据库执行任何其他操作。该过程在升级前 1 天的某个时间点运行。
我还删除了我拥有的自定义 autovacuum 设置,现在只使用默认设置。
以下是这些查询结果的附件;
SELECT * FROM pg_stat_activity;
SELECT * FROM pg_stat_database;
SELECT * FROM pg_stat_user_tables;
SELECT * FROM pg_stat_user_indexes;
SELECT * FROM pg_locks;
Run Code Online (Sandbox Code Playgroud)
VACUUM
可以通过以下方式安全地终止由 autovacuum 启动的进程:
SELECT pg_terminate_backend(PID_of_backend);
Run Code Online (Sandbox Code Playgroud)
实际上,Postgresql 中的任何客户端进程都可以通过这种方式终止。此后端未提交的工作将被简单地丢弃。
然后,您可以VACUUM
在低流量时间手动重新运行:
VACUUM VERBOSE users;
Run Code Online (Sandbox Code Playgroud)
检查基于成本的真空延迟是否可以帮助您。这将限制您的 autovacuum 进程使用的 I/O 数量。
也许您只是达到了 IOPS 限制。您应该能够在 AWS 界面上看到这些数字。在独立的 Linux 上用于iostat -dtkxy 10
测量 I/O。(iostat
通常包装在sysstat
包中)。
也许VACUUM
由于您的配置中的激进设置,它经常再次出现。
归档时间: |
|
查看次数: |
3890 次 |
最近记录: |