Help Center/ GaussDB(DWS)/ Troubleshooting/ Database Use/ "Can't fit xid into page" Is Reported
Updated on 2024-01-25 GMT+08:00

"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:

  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.

  2. Run the following command to query information about old transactions in the cluster:

    1
    SELECT * FROM pgxc_running_xacts where xmin::text::bigint < $base+$min and xmin::text::bigint > 0;
    

  3. Query workloads in Step 2 in the pgxc_stat_activity view and run the following command to stop the corresponding threads:

    1
    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.

  4. Run the VACUUM FULL FREEZE statement on the table that reports the error.

    VACUUM FULL FREEZE table_name;

  5. 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.