btree_free_percent.patch

application/octet-stream

Filename: btree_free_percent.patch
Type: application/octet-stream
Part: 0
Message: TODO-Item: B-tree fillfactor control

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: context
File+
src/backend/access/nbtree/nbtsort.c 5 4
src/backend/utils/misc/guc.c 20 0
diff -cpr pgsql-orig/src/backend/access/nbtree/nbtsort.c pgsql/src/backend/access/nbtree/nbtsort.c
*** pgsql-orig/src/backend/access/nbtree/nbtsort.c	2006-01-19 22:02:42.000000000 +0900
--- pgsql/src/backend/access/nbtree/nbtsort.c	2006-01-19 22:13:13.000000000 +0900
*************** typedef struct BTWriteState
*** 125,130 ****
--- 125,132 ----
  	  (sizeof(BTItemData) - sizeof(IndexTupleData))) : \
  	 0)
  
+ double	btree_node_free_percent = 30.0;
+ double	btree_leaf_free_percent = 10.0;
  
  static Page _bt_blnewpage(uint32 level);
  static BTPageState *_bt_pagestate(BTWriteState *wstate, uint32 level);
*************** _bt_pagestate(BTWriteState *wstate, uint
*** 360,369 ****
  	state->btps_lastoff = P_HIKEY;
  	state->btps_level = level;
  	/* set "full" threshold based on level.  See notes at head of file. */
! 	if (level > 0)
! 		state->btps_full = (PageGetPageSize(state->btps_page) * 3) / 10;
! 	else
! 		state->btps_full = PageGetPageSize(state->btps_page) / 10;
  	/* no parent level, yet */
  	state->btps_next = NULL;
  
--- 362,370 ----
  	state->btps_lastoff = P_HIKEY;
  	state->btps_level = level;
  	/* set "full" threshold based on level.  See notes at head of file. */
! 	state->btps_full = (Size) ((PageGetPageSize(state->btps_page)
! 		* (level > 0 ? btree_node_free_percent : btree_leaf_free_percent)
! 		+ 99) / 100);
  	/* no parent level, yet */
  	state->btps_next = NULL;
  
diff -cpr pgsql-orig/src/backend/utils/misc/guc.c pgsql/src/backend/utils/misc/guc.c
*** pgsql-orig/src/backend/utils/misc/guc.c	2006-01-19 22:02:42.000000000 +0900
--- pgsql/src/backend/utils/misc/guc.c	2006-01-19 22:13:02.000000000 +0900
*************** extern int	CommitDelay;
*** 95,100 ****
--- 95,102 ----
  extern int	CommitSiblings;
  extern char *default_tablespace;
  extern bool fullPageWrites;
+ extern double btree_node_free_percent;
+ extern double btree_leaf_free_percent;
  
  #ifdef TRACE_SORT
  extern bool trace_sort;
*************** static struct config_real ConfigureNames
*** 1685,1690 ****
--- 1687,1710 ----
  		0.2, 0.0, 100.0, NULL, NULL
  	},
  
+ 	{
+ 		{"btree_node_free_percent", PGC_SUSET, RESOURCES,
+ 			gettext_noop("Reserved free space for btree node pages during index creation."),
+ 			NULL
+ 		},
+ 		&btree_node_free_percent,
+ 		30.0, 0.0, 66.6, NULL, NULL
+ 	},
+ 
+ 	{
+ 		{"btree_leaf_free_percent", PGC_SUSET, RESOURCES,
+ 			gettext_noop("Reserved free space for btree leaf pages during index creation."),
+ 			NULL
+ 		},
+ 		&btree_leaf_free_percent,
+ 		10.0, 0.0, 66.6, NULL, NULL
+ 	},
+ 
  	/* End-of-list marker */
  	{
  		{NULL, 0, 0, NULL, NULL}, NULL, 0.0, 0.0, 0.0, NULL, NULL