Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w25zD-000sNm-1N for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 11:19:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w25zB-009YYL-1h for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 11:19:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w25zB-009YYC-0U for pgsql-hackers@lists.postgresql.org; Mon, 16 Mar 2026 11:19:49 +0000 Received: from mail-australiaeastazolkn19011028.outbound.protection.outlook.com ([52.103.72.28] helo=SY2PR01CU004.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w25z9-00000000Pl8-0iRH for pgsql-hackers@lists.postgresql.org; Mon, 16 Mar 2026 11:19:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QLPaFqWu2h09HFXxpuDq9juAjSh9hAjmG/6LfOY11Uo4RE2wmicFzm9eAqqv4pudxRGRn4Yi6ktPjziORvronhwogMt19vtxMe3gQl6oHafJZGWYW65LF2ju4rB5wI6nWLj0sc3N9KsWrGBlmaj1Ucb4Zx/F1si7vVR7CLh7T1mqNgw9HYL9+2L5KFjAp8o4eUaWAh0g6ijV020zrzSJHsxXhsYUXMwCZvYznyx0ZPfK8Thvwu7Zicy60QPhWR7hFPmUOIDs/13J5g1PTvYKZ044VAd95Dxus6d6ThuaBseMdbPvSnvvNjB+S7p1u8NnFXeO/3ZtnZAZi3KHZ3uX+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZU/4hk/sJLT+vCZkzp5KzI2JNS7I4lQ20AoWCboKdvc=; b=K23oeBST4AXhkxR6KJedc7Zn2tTT4JDblx8vr6OtbqePwgORGdSaS5//VW37n51b16thYubocpIZ8jFayVZtBhX/OrqwpxCAe/RI431tsnqRSibw9DwpMYUoDIYiVyQ9KWPSTM0NWJVB+dXnhnF7VQ7LEhSgsA8P6IrzKq+Vgz9jJG8S8tn8rFCfXaypBXmTyAn3VxEPgWbauEHwwJlMEwlqGLuMZFwwlMzza+2cRqdsDnoaCVQR1R/lQu0curhKus50CtZMBDV0Eyj2wG0aNASkMCZrBZSlYC8qWHGA/zcunkSbKeU50h6DwKLYvhd+2z2ZoB9rHWK1w6GT+w0AvA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZU/4hk/sJLT+vCZkzp5KzI2JNS7I4lQ20AoWCboKdvc=; b=mUmsvexyo7Tf8aPZla6mEqhMPgC+xKsnciLZ2kZY9f4w2AqR35jqcbec5ZtY2kGtQKxP1DPgnxHg8wa+p6E+4Pc+MFj5D9NWj+XUgHiYP7sB0Ts/naW9Mp1XUst0YwAPI59AMJ+i7eOOiasUJVk7UFbHMwadXK6Q7ZD03TKHALfiSFXCM7myh2AyVe+r2cDWg7TVnxJFZ1gHk89+7jwMjdsCrG9BqQLfPyemTXs9yNkFwwWgNAIb8WvOuF3ZHpBdy/2dP/trQRFUphKl5W5gz1ENNgqHaetv2ltcwenZOZl6sedHO19JsKzbSY4iWxLn3V5MK/eZOVXUhpOn3f5Dbg== Received: from SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) by MEYPR01MB6486.ausprd01.prod.outlook.com (2603:10c6:220:112::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.25; Mon, 16 Mar 2026 11:19:39 +0000 Received: from SY7PR01MB10921.ausprd01.prod.outlook.com ([fe80::7908:e00:4ab1:d120]) by SY7PR01MB10921.ausprd01.prod.outlook.com ([fe80::7908:e00:4ab1:d120%5]) with mapi id 15.20.9700.022; Mon, 16 Mar 2026 11:19:39 +0000 From: Japin Li To: wenhui qiu Cc: Shinya Kato , Sami Imseih , PostgreSQL Hackers Subject: Re: Report oldest xmin source when autovacuum cannot remove tuples In-Reply-To: (wenhui qiu's message of "Mon, 16 Mar 2026 15:59:36 +0800") References: User-Agent: mu4e 1.12.12; emacs 29.3 Date: Mon, 16 Mar 2026 19:19:34 +0800 Message-ID: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0025.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::13) To SY7PR01MB10921.ausprd01.prod.outlook.com (2603:10c6:10:334::16) X-Microsoft-Original-Message-ID: <87qzpkhvi1.fsf@hotmail.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY7PR01MB10921:EE_|MEYPR01MB6486:EE_ X-MS-Office365-Filtering-Correlation-Id: ab61939f-fb47-4e43-0877-08de834dea1d X-Microsoft-Antispam: BCL:0;ARA:14566002|39105399006|461199028|22091999003|24121999003|20031999003|24071999003|55001999003|6090799003|5072599009|15080799012|12121999013|19110799012|23021999003|8060799015|1602099012|40105399003|4302099013|3412199025|440099028|10035399007|18061999006|26131999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SmlDblJoQUJRaHZZOW1uOWFMdU02eEVSbEpDWlR6bWxoaXNGSXJWV0xVUEJP?= =?utf-8?B?RGlXTzRIc1p0RWdNeXMva1dNak85c0ZPb2w3bVNqREhpWTJMVG8xdEFOWE1R?= =?utf-8?B?MzV1cDdzSFMvbWp4MnE2TExWeHVML1BDVDBvUk16OW55SWNnb3RucE5qS1ZZ?= =?utf-8?B?Sk9lQXplNi90OWhGZ3NIZFVYOFRCM2YyMzVNV1diVGlmM0ZPZFpwZzU4RGFh?= =?utf-8?B?SlhaMVcxU2gveFJuZy9KWTc3ZXZ1bEdITnpDM0NQZFNLVUFFdmg5eUQ4UVpL?= =?utf-8?B?VFNGUWZheEZrZGY1KzBudWZ3ZkxYSnorRysvRklEeVhFb0cyMVBYdHM4aTF5?= =?utf-8?B?ZjlXaVRzVjRhY0twK3RzQUxRa2NDbTQ2RFRSbE9lbjVRN1gycjIxZitacGVG?= =?utf-8?B?TGZmWEJlUmVjSFY3ZWpmbmVFRzFLMG1aVUtMU1VSSGR4WGhiakRmOG1NVTd6?= =?utf-8?B?a1B3QlVyRGlEeFZWZVBZTzh3aWl4cUorZFI1UFZZS1V0OGJYU2Vwa2RUcFI2?= =?utf-8?B?dXBhS2FOOEFHWVFWMzN3Qlk0VmNMV3BPbDNHMFpDRVR4V1FZK2NhWnVQc1p0?= =?utf-8?B?Q2lOcHlWV01sY21TZ0tFYW9zRVMzUFRNWEhraHFWcVBXUzZGNVRaZzlVRGpD?= =?utf-8?B?VlpkMW5lV0tlMnhQdk5rTXhqZGhvbW1aU0h2NzB3ZndHeEM4RWNEVUtadTdK?= =?utf-8?B?SDF0R3VCL1hVQ1hnVmgrVDdmbnkzc29uQnZaai85MFVrOWUzMGZkSHZ4TmdJ?= =?utf-8?B?QllQcTluYWxnOGZyd2QxK2xtK09jci9sNE5JY1A1Y2NCZHZ5c0sxRHg4R2Mw?= =?utf-8?B?RVp0V2xYSUpTSG14bTE1T29MdjdBUFdqSTRHZGY2bDd4ZFFQRCs0d3FWZFRP?= =?utf-8?B?SkYvOGdHZ3hiclRtVkNUZVdONDFweWFoTzhneEp4M0tGLzFpem45aGx0aGtQ?= =?utf-8?B?TG1aODd3VWNhNnU1dDl6Y0l3OExaRWNwZkRWVElGVE5lVUJXai9Uc3JrUFZO?= =?utf-8?B?MWF0WW1xM3F0b1dVNTRGa3V4Y0NCdzFaZFllQWNadWxnQ3hCMlpETlYvMzZS?= =?utf-8?B?b2Q5OVJhdlU1ek4rZ3cxaVE4SzVrNEpBMGpCS1ZKWGF1UTUxa2ErYTNjbUxW?= =?utf-8?B?M1VOQUNML1htNnd0WUtoeXRQVWEyT3QvZExvQSswOUlXZjlzemI1T3ZFTm5k?= =?utf-8?B?bUJNY3h2eVg2ckE0N2k0TmIvNnFkV0V5ZHY2eFRuT3E5cGhWYWVaZ0hjR0Q4?= =?utf-8?B?MjJ2bTEyano4OUdVMU1zMUd0QkxVL0pwOEFzeDRORXBHN0MrRndKa2JTdElI?= =?utf-8?B?OC9kY0VQRzlSbTRad3BSczFWWEtreklXTWkweFZINkdGNExYRVRHVDFXRWtE?= =?utf-8?B?eE5tOUdmcmUvdGREVU1tTlZQcFk0WkdVeVBGSkswdUhGcXJwUkw3SGQzVGhL?= =?utf-8?B?QlpIejB4YnBGWjRyY1Yva0YxaWxiMmhTejRld01DQTdmRHc3aGJCK0RSTUY1?= =?utf-8?B?L1NaZk5hdVVJVGxiUk9CNWhoc1BYb2xLYnZFZUJUb1FEWTNoNndXaVIrRzBY?= =?utf-8?B?bHdLVE5JcjVkdUdCU1BQdDA4VlhDTFJtdmg5WGJnMHRqNmU0cjk0Vlc1UzdS?= =?utf-8?B?a0Y1R3U0VTlZV3Y2cG52cXhNa01VaWFGVnd4V0F3d2wwSlZNMHpXVUxTUlow?= =?utf-8?B?SEV5R1FqazlpVWFmckd4OEJMc3NadEdrTXBYOXFLd1diekxZTk54em93PT0=?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?REZja2ZGNXQycGJOUUN5Q0hWT2VudjZ5WlNtQStmT0ZraDFqYm4wMHkyTUVM?= =?utf-8?B?N1ZtZnd3QTZGRHE1eXk0L1EwMUlPOGgrREltNlpyd21UTUh1aCs5M1Y2MWhl?= =?utf-8?B?YW1tTzhOVUNUZHlCVGQyTFQvZzJmUGVGK3RxK0p4R01QVUNmQXQwd0xndndD?= =?utf-8?B?dlhwaXljOXlkdHBFd1EyR2IyTGZQZ0paM0FVVFNzR1huMnU1UEdnaDhyQWIz?= =?utf-8?B?bmRhY1NXN2pQWU5LQ3FYYlRwNHA1MGFTclFRK1FSU25QOEhXRDBiamljai9B?= =?utf-8?B?K204eTdXYWNlY21SWDRjdXkxVHd0UFFCYXZwZUdTR2NmOWQvblZXdTRWbzhZ?= =?utf-8?B?TkJOdU5JaDlia3AwR2ZVQ0h2bXM5MmhpUUlwekhkK1doWStGaGdUa2JNWW43?= =?utf-8?B?cXFUamxCNG9MejVxSlhud2NwSnhTeEV2N3BwcUNwSjR0cTZqMTZXd25WWCt2?= =?utf-8?B?YUtQeDF1M2RHbWlDeUNrLzlENXNOMDZuc1MyQ2V5VGx6N2tXNzZIdXBnMmdl?= =?utf-8?B?aFAwT1JLd0F5Y29JdUxWdUFXclorSnd5cFBDYVF6VDdBSEYyazhrcWF4Vzkw?= =?utf-8?B?ZjhzeFE1ZWNCVHYzRmRMQnJXRW1Sd0RENkZoUkVrblRrSkcyZEFGNmxRWkZK?= =?utf-8?B?ODRZNGQwUkF0UGpjNW5nek0xaEhqa1ZuZXl2R0x4UnlEbkxzNnFkVkV2Ym9Q?= =?utf-8?B?UHNDZGZrTXVRR0RLaHAyK0lvOXNKb2NKUW9mdnZCNUsvS3ozTnRiNmZzVkdT?= =?utf-8?B?TkFOQTdQUXovc2VnZk12K3JsZHp2VGxxTnNMRnBVbWlQUFVONG9KMUpUV2ta?= =?utf-8?B?cDQyRW5YT1BlUW9LRlJteG1ndGRvWEJWWWEvc1BjcjBGcVBZTDU1Vk81RXla?= =?utf-8?B?VDJiZVJOM3ZCaDRTTjdnRElDN2ZYTmhSUEJYUkpOYkFrVDZXWjJtWHJvQ2tV?= =?utf-8?B?VUFMNGFUL1Vydy9ONjVEUFBCTHZmd3lTZTR3YVo2WHRmQkNGNjFKV0paUnBl?= =?utf-8?B?d0FEb2VMNmdrL1pOWWtIMzB5M003ZXVsSkYwMXJqL1VGRTJmUFBoKzYwaGg1?= =?utf-8?B?S0FDVVR6ZUJIb3hodFFnTkU2SUFDOFRFQkpzY2t3VEZReTQ4bkEwVGRnS0Nn?= =?utf-8?B?ODNKdGt3K0h6T3F0L1lVMTh3T1dNSnJ1NGx5cHo3VDBMaFpmVlJndEtHRjRE?= =?utf-8?B?TTViaVJyMFU5RWFWeUYwUFpiaDRDclk2RDJQVDdwK0ZlOElkVk1JdmpQNmdj?= =?utf-8?B?WmlLSjV0TldrWlNwN0c0QURZQnJTc1RMVFoxdW5iVnZ5YjJRcHZvZ29wbXJk?= =?utf-8?B?Y0M5WUtkMTUyUWlMU2RoL2h5VVY3WlNUTXVwS1JBNUlyd25BZ3hwQjVzWk9V?= =?utf-8?B?WHZhQllBdG9rMEdoVld1MXNDY0lmU0dCN2h3N3RZb3NtUmt3dC91Y3NPclhv?= =?utf-8?B?dGpRcmR0RndaTjZzd1ppS0l0L2hSY2pnVTJzQmtIc0NRQUxvTlBzNlYzYlVU?= =?utf-8?B?ZnRwS0JlMHR4Nm83SlBnTzI3L2Fad3M2cFkySGdSenErdnFyMXJLS1p1U2RD?= =?utf-8?B?UDA2dlpOU1RZZlRkKy9kUzYrVFlGWGZhR21jUTRoaDRhTGxQbUNYRkVLTUMr?= =?utf-8?B?MTFzVU56Y29vZElxd0o0dTFOSzhXbWJwb0pmWDBzdUdxdXJ1RGFiNzRtUEYy?= =?utf-8?B?VkhDVWtwRmlDeHFXT3ZxUkpObFpRenpuSkZWdlduZnVqYzZ4TzZjcVpXVHh5?= =?utf-8?B?OFdaMjhneTZkT3hvUDBWUkx5ODFkckQ5VnN6V2ZLeVZlMGRkT20wbWtFSC85?= =?utf-8?B?T0htWnoyK21xVWhXNG5Wa1JaNXh1SURSeW9zM3RsclQ0aUhHWGZJdGE1cnk5?= =?utf-8?Q?/IxiAWsMiAGMc?= X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-feddd.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: ab61939f-fb47-4e43-0877-08de834dea1d X-MS-Exchange-CrossTenant-AuthSource: SY7PR01MB10921.ausprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2026 11:19:39.7843 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MEYPR01MB6486 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Mon, 16 Mar 2026 at 15:59, wenhui qiu wrote: > HI Shinya >> typedef enum XidHorizonBlockerType >> { >> XHB_NONE =3D 0, >> XHB_ACTIVE_TRANSACTION, >> XHB_IDLE_IN_TRANSACTION, >> XHB_PREPARED_TRANSACTION, >> XHB_XMIN_ACTIVE_TRANSACTION, >> XHB_XMIN_IDLE_IN_TRANSACTION, >> XHB_HOT_STANDBY_FEEDBACK, >> XHB_REPLICATION_SLOT, >> } > Thank you for your working on this ,I have another small suggestion=20 > The priority ordering encoded in XidHorizonBlockerType determines which b= locker gets reported when multiple candidates > exist. In particular: > > ACTIVE_TRANSACTION > IDLE_IN_TRANSACTION > PREPARED_TRANSACTION > > Prepared transactions are currently ranked after idle-in-transaction sess= ions. Operationally, prepared transactions are > often harder for DBAs to resolve than idle sessions, so it might be worth= clarifying the rationale behind this ordering > or reconsidering whether prepared transactions should have higher priorit= y. Agreed. Explaining the reason for this priority is very helpful. >> typedef enum XidHorizonBlockerType >> { >> XHB_NONE =3D 0, >> XHB_ACTIVE_TRANSACTION, >> XHB_PREPARED_TRANSACTION, >> XHB_IDLE_IN_TRANSACTION, >> XHB_XMIN_ACTIVE_TRANSACTION, >> XHB_XMIN_IDLE_IN_TRANSACTION, >> XHB_HOT_STANDBY_FEEDBACK, >> XHB_REPLICATION_SLOT, >> } > Another one: > Currently GetXidHorizonBlocker() selects only one blocker (based on the e= num priority) even though multiple independent > sources could hold back the xmin horizon simultaneously. For example, it = is possible to have both a prepared transaction > and a replication slot preventing the horizon from advancing. > Have you considered reporting all detected blockers instead of just the h= ighest-priority one? Returning only a single > entry might hide other relevant blockers from the user. > I'm also curious =E2=80=94 why don't we list all the blockers? Did I miss a= nything? > Thanks > > On Thu, Feb 5, 2026 at 12:40=E2=80=AFPM Shinya Kato wrote: > > HI, > > Sorry for the late reply. I've updated the patch to follow Sami's > recommended approach. > > Overview: > - Instead of modifying ComputeXidHorizons(), this patch introduces two > new functions: GetXidHorizonBlockers() and GetXidHorizonBlocker(). > - GetXidHorizonBlockers() retrieves all potential blockers. This API > design leaves open the possibility of exposing this information > through a dynamic statistics view in the future [0]. > - GetXidHorizonBlocker() selects the highest-priority blocker from the > candidates returned by GetXidHorizonBlockers(). > - Priority is defined in the XidHorizonBlockerType enum. By > distinguishing whether the blocker matches the horizon via xid or > xmin, the appropriate blocker is selected. > > Changes addressed from review comments: > - Fixed unstable regression test (Fujii-san's and Andres's comments). > - When multiple blockers share the same horizon, the blocker with the > highest priority is now selected for output (Fujii-san's comment). > - Removed unnecessary code (Fujii-san's comment). > - Distinguished between active transactions and idle-in-transaction > sessions, and added tests for both (Sami's and Wenhui's comments). > - Added a trailing comma to the last value of the enum (Sami's comment). > - Added a new function GetXidHorizonBlockers(), modeled after > BackendXidGetPid(), instead of modifying ComputeXidHorizons() (Sami's > comment). > - Added a test for a SERIALIZABLE transaction (Sami's comment). > > Not addressed: > - Did not switch from int to pid_t for the pid type, because int is > used consistently throughout the PostgreSQL codebase for this purpose > (Sami's comment). > > Other changes: > - Changed the TAP test to use VACUUM (VERBOSE) instead of autovacuum. > > [0] https://www.postgresql.org/message-id/CAAaqYe9Dy9sicKg3xzCQUMK3VLdEP= 39g9nMGZheqtFYfNiO5Bg%40mail.gmail.com > > -- > Best regards, > Shinya Kato > NTT OSS Center --=20 Regards, Japin Li ChengDu WenWu Information Technology Co., Ltd.