Skip to content

Latest commit

 

History

History
102 lines (71 loc) · 4.1 KB

20230306_02.md

File metadata and controls

102 lines (71 loc) · 4.1 KB

PostgreSQL 16 preview - vacuum 支持指定仅处理 MAIN 或 TOAST

作者

digoal

日期

2023-03-06

标签

PostgreSQL , PolarDB , vacuum , PROCESS_MAIN , PROCESS_TOAST


背景

vacuum 支持通过 PROCESS_MAIN, PROCESS_TOAST 来配置是否处理“主存储”或“toast存储”.

VACUUM (PROCESS_MAIN FALSE, PROCESS_TOAST FALSE) vac_option_tab;  

https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=4211fbd8413b26e0abedbe4338aa7cda2cd469b4

Add PROCESS_MAIN to VACUUM master github/master  
author	Michael Paquier <michael@paquier.xyz>	  
Mon, 6 Mar 2023 07:41:05 +0000 (16:41 +0900)  
committer	Michael Paquier <michael@paquier.xyz>	  
Mon, 6 Mar 2023 07:41:05 +0000 (16:41 +0900)  
commit	4211fbd8413b26e0abedbe4338aa7cda2cd469b4  
tree	0c8ac21d9f1a3c83463e79da5e104153741c86e4	tree  
parent	46d490ac19a7ca93a5c0f47e5a0e759b5385a8ae	commit | diff  
Add PROCESS_MAIN to VACUUM  
  
Disabling this option is useful to run VACUUM (with or without FULL) on  
only the toast table of a relation, bypassing the main relation.  This  
option is enabled by default.  
  
Running directly VACUUM on a toast table was already possible without  
this feature, by using the non-deterministic name of a toast relation  
(as of pg_toast.pg_toast_N, where N would be the OID of the parent  
relation) in the VACUUM command, and it required a scan of pg_class to  
know the name of the toast table.  So this feature is basically a  
shortcut to be able to run VACUUM or VACUUM FULL on a toast relation,  
using only the name of the parent relation.  
  
A new switch called --no-process-main is added to vacuumdb, to work as  
an equivalent of PROCESS_MAIN.  
  
Regression tests are added to cover VACUUM and VACUUM FULL, looking at  
pg_stat_all_tables.vacuum_count to see how many vacuums have run on  
each table, main or toast.  
  
Author: Nathan Bossart  
Reviewed-by: Masahiko Sawada  
Discussion: https://postgr.es/m/20221230000028.GA435655@nathanxps13  
+-- PROCESS_MAIN option  
+-- Only the toast table is processed.  
+VACUUM (PROCESS_MAIN FALSE) vac_option_tab;  
+SELECT * FROM vac_option_tab_counts;  
+  rel  | vacuum_count   
+-------+--------------  
+ main  |            2  
+ toast |            2  
+(2 rows)  
+  
+-- Nothing is processed.  
+VACUUM (PROCESS_MAIN FALSE, PROCESS_TOAST FALSE) vac_option_tab;  
+SELECT * FROM vac_option_tab_counts;  
+  rel  | vacuum_count   
+-------+--------------  
+ main  |            2  
+ toast |            2  
+(2 rows)  

digoal's wechat