我在一个运行在Debian /Linux服务器上的big_table 12.7数据库中有一个大表(我们称之为PostgreSQL )。这台机器有8GB的内存和4个CPU核,并且主要用于这个PostgreSQL服务器。
目前,这个big_table有大约1.03亿行保存时间序列数据(例如,数据不被更新、只插入或删除)。几乎每个月,我都会从这个表中删除大约2500万到3000万行。这些被删除的行对应于连续的时间范围(例如,“删除.介于1-Mar和30-MAR之间”之类的内容)。这些DELETE操作需要10分钟到30分钟才能完成。这种使用模式有效期超过6个月。
表大小约为46 GB,该表的索引加起来约为61 GB。
有一个应用程序每隔几秒钟就向这个big_table插入10行,另一个面向用户的web应用程序从这个表中读取一些最近的值。
每次我运行删除2500万至3000万行(月底)的DELETE操作时,我都会看到AUTOVACUUM启动并开始工作。
我想检查一些有关AUTOVACUUM的统计数据,并在该数据库中运行以下SQL查询:
SELECT relname, last_vacuum, vacuum_count, autovacuum_count, last_autovacuum, autoanalyze_count, last_autoanalyze
FROM pg_stat_user_tables
WHERE relname = 'big_table' ;令我惊讶的是,它得出了以下结果:
|relname |last_vacuum|vacuum_count|autovacuum_count|last_autovacuum|autoanalyze_count|last_autoanalyze|
|------------|-----------|------------|----------------|---------------|-----------------|----------------|
|big_Table | |0 |0 | |0 | |我试图理解以下几点:
autovacuum_count和auto_analyzecount为零?last_autovacuum和last_autoanalyze为空?不幸的是,https://www.postgresql.org/docs/12/monitoring-stats.html的官方文档对我没有多大帮助。
发布于 2021-06-11 14:00:16
如果数据库被不干净地关闭,那么所有的状态都会被重置。你可以检查一下pg_stat_database。或者可以手动重置它们,无论是针对数据库还是针对单个表。
AUTOVACUUM可以启动但不能完成吗?类似的分析?
是的,但是日志文件中应该有关于它的消息。
例如,如果您经常执行诸如重新启动数据库或创建或删除索引之类的事情,这将中断自动真空,如果您经常这样做,那么自动真空可能永远无法完成。
https://dba.stackexchange.com/questions/294122
复制相似问题