"Can't fit xid into page" Is Reported
Symptom
Scenario 1: Error Can't fit xid into page, now xid is 34181619720, base is 29832807366, min is 3, max is 3. is Reported when VACUUM FULL is executed.
Scenario 2: When the FUNCTION permission is assigned to a user at a site, the following error information is displayed:
Can't fit xid into page. relation "pg_proc", now xid is 34181619720, base is 29832807366, min is 3, max is 3.
Possible Causes
An old transaction exists in the system.
Handling Procedure
Handling procedure for scenario 1:
- Check whether there are old transactions.
1 2 3 4 5
select * from pgxc_gtm_snapshot_status(); xmin | xmax | csn | oldestxmin | xcnt | running_xids -------------+-------------+--------------+--------------+--------+--------------- 34730350588 | 34730350588 | 34730350553 | 34730350553 | 0 (1 row)
- If the value of oldestxmin in the query result is close to the xid 34181619720 in the error message and is greater than the values of base+min and base+max, old transactions do not affect the FREEZE operation. In this case, perform Step 4.
- If the value of oldestxmin in the query result is much smaller than base+min, there are old transactions in the system and VACUUM FREEZE does not take effect. In this case, perform Step 2.
- Run the following command to query information about old transactions in the cluster:
1select * from pgxc_running_xacts where xmin::text::bigint < $base+$min and xmin::text::bigint > 0;
- Query workloads in Step 2 in the pgxc_stat_activity view and run the following command to stop the corresponding threads:
select pg_terminate_backend(pid) from pgxc_running_xacts where xmin::text::bigint <$base+$min and xmin::text::bigint > 0;
pgxc_running_xacts can only query active transactions on CNs. If the error is reported on a DN, query the pg_running_xacts view on the DN.
- Run the VACUUM FULL FREEZE command on the table where the error is reported.
vacuum full freeze table_name;
- Log in to the GaussDB(DWS) management console and check the value of vacuum_freeze_min_age. If the value is 5000000000, perform the following operations to change it to 2000000000:
In the cluster list, find the target cluster and click the cluster name. The Cluster Information page is displayed. Click the Parameters tab and modify the value of parameter vacuum_freeze_min_age. Click Save.

Handling procedure for scenario 2:
Clear the transactions by referring to Step 2 and Step 3 in scenario 1. You do not need to perform the VACUUM FREEZE operation.
Did this article solve your problem?
Thank you for your score!Your feedback would help us improve the website.