在创建/删除/更新查询时出现错误:
错误:数据库不接受命令以避免数据库“mydb”中的环绕数据丢失提示:停止 postmaster 并使用独立后端清理该数据库。您可能还需要提交或回滚旧的准备好的事务。
因此,数据库被阻塞,只能执行 SELECT 查询。
数据库大小 350 GB。1 个表(my_table)有约 10 亿行。
系统:“x86_64-unknown-linux-gnu 上的 PostgreSQL 9.3.4,由 gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) 编译,64 位”
postgresq.conf 一些设置:
effective_io_concurrency = 15 # 1-1000; 0 disables prefetching
autovacuum_vacuum_cost_delay = -1
#vacuum_cost_delay = 0 # 0-100 milliseconds
#vacuum_cost_page_hit = 1 # 0-10000 credits
#vacuum_cost_page_miss = 10 # 0-10000 credits
#vacuum_cost_page_dirty = 20 # 0-10000 credits
#vacuum_cost_limit = 200
我不使用准备好的交易。但是每天使用基本存储过程(这意味着自动交易,对吗?)5000 万次。
目前,“autovacuum: VACUUM ANALYZE public.my_table ( to prevent wraparound)”正在执行,该查询活动几乎持续了 12 个小时。
据我了解,未抽空的死人的问题,对吧?
如何解决这个问题并在未来防止这种情况发生?请帮忙 :)
故事结束(~一个月后) 现在我的大桌子被数千张桌子隔开。每个小桌子的吸尘速度都要快得多。Autovacuum 配置设置为更接近默认值。如果需要,我可以再次设置为更具侵略性,但到目前为止,拥有数十亿行的数据库运行良好。
所以,题目的问题应该不会再出现了。
ps 现在我将 Postgres-XL 视为数据可扩展性的下一步。