为什么 RDS PostgreSQL 的“MaximumUsedTransactionIDs”即使在数据库看起来正确“VACUUM FREEZE”之后也不会减少?

483*_*347 6 postgresql amazon-rds

我的MaximumUsedTransactionIDs似乎无限期地继续增长,但我有这些证据暗示我它可能不应该以这种方式发生:

$ PGPASSWORD=$MY_USER_LAND_RDS_SUPER_USER_PASSWORD psql -h $MY_RDS_INSTANCE -d
my_main_data_base -U $MY_USER_LAND_RDS_SUPER_USER
psql (9.5.8, server 9.5.10)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 
256, compression: off)
Type "help" for help.

my_main_data_base=> SELECT datname FROM pg_database;
     datname
-------------------
 template0
 rdsadmin
 template1
 postgres
 my_main_data_base
 another_data_base
(6 rows)

my_main_data_base=> VACUUM FREEZE; SELECT relname, age(relfrozenxid) AS xid_ag
e FROM pg_class JOIN pg_stat_all_tables USING (relname) ORDER BY xid_age DESC 
LIMIT 5;
VACUUM
       relname        | xid_age
----------------------+---------
 pg_toast_1150794     |   63707
 a_user_table         |   63707
 another_user_table   |   63707
 pg_toast_1223948     |   63707
 pg_toast_1223998     |   63707
(5 rows)

my_main_data_base=> \q
$ PGPASSWORD=$MY_USER_LAND_RDS_SUPER_USER_PASSWORD psql -h $MY_RDS_INSTANCE -d
another_data_base -U $MY_USER_LAND_RDS_SUPER_USER
psql (9.5.8, server 9.5.10)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 
256, compression: off)
Type "help" for help.

another_data_base=> VACUUM FREEZE; SELECT relname, age(relfrozenxid) AS xid_ag
e FROM pg_class JOIN pg_stat_all_tables USING (relname) ORDER BY xid_age DESC 
LIMIT 5;
VACUUM
      relname       | xid_age
--------------------+---------
 pg_toast_2964      |   12350
 pg_toast_3592      |   12350
 pg_toast_2396      |   12350
 pg_db_role_setting |   12350
 pg_authid          |   12350
(5 rows)

another_data_base=> \q
$ _
Run Code Online (Sandbox Code Playgroud)

$MY_USER_LAND_RDS_SUPER_USER是 AWS RDS 为我提供的超级用户。从RDS的角度看是超级用户,从PostgreSQL的角度看不是超级用户。


我预计现在会MaximumUsedTransactionIDs减少,但事实并非如此。它仍然在大约~80.000.000

我计划在它到达后,100.000.000我将创建一个 RDS 实例的开发版本,我将在其中创建它,以便 AWS 启动该autovacuum 过程。

问题

  1. 发生了什么事MaximumUsedTransactionIDs?为什么它不收缩?

  2. autovacuum照顾MaximumUsedTransactionIDs一旦启动?

  3. autovacuum在我的场景中是否无关紧要,因为我VACUUM FREEZE不时在所有用户土地数据库上手动运行不合格的 s?

  4. 我应该忽略MaximumUsedTransactionIDs吗?

  5. 我能以某种方式连接到数据库rdsadminSELECT age(relfrozenxid) 那里?

编辑,满足您的第一个请求,添加...

$ PGPASSWORD=$MY_USER_LAND_RDS_SUPER_USER_PASSWORD psql -h $MY_RDS_INSTANCE -d
my_main_data_base -U $MY_USER_LAND_RDS_SUPER_USER
psql (9.6.6, server 9.5.10)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 
256, compression: off)
Type "help" for help.

postgresql=> SELECT datname, datfrozenxid FROM pg_database;
     datname       | datfrozenxid
-------------------+--------------
 template0         |         1822
 rdsadmin          |         1822
 template1         |         1822
 postgres          |         1822
 my_main_data_base |     76628948
 another_data_base |     76681257
(6 rows)

postgresql=> \q
$ _
Run Code Online (Sandbox Code Playgroud)

483*_*347 2

在参数组中激活 autovacuum,当它达到配置的级别(最小 100.000.000)时,它将启动并MaximumUsedTransactionIDs急剧下降。