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