Commit 8b2f33f8 authored by Marko Mäkelä's avatar Marko Mäkelä

Implement UNIV_BTR_AVOID_COPY, an optimization of page splits.

parent e67b5257
2010-04-20 The InnoDB Team
* btr/btr0btr.c, include/univ.i:
Implement UNIV_BTR_AVOID_COPY, for avoiding writes when a B-tree
node is split at the first or last record.
2010-04-15 The InnoDB Team 2010-04-15 The InnoDB Team
* trx/trx0rec.c: * trx/trx0rec.c:
......
...@@ -2015,7 +2015,17 @@ insert_right: ...@@ -2015,7 +2015,17 @@ insert_right:
} }
/* 5. Move then the records to the new page */ /* 5. Move then the records to the new page */
if (direction == FSP_DOWN) { if (direction == FSP_DOWN
#ifdef UNIV_BTR_AVOID_COPY
&& page_rec_is_supremum(move_limit)) {
/* Instead of moving all records, make the new page
the empty page. */
left_block = block;
right_block = new_block;
} else if (direction == FSP_DOWN
#endif /* UNIV_BTR_AVOID_COPY */
) {
/* fputs("Split left\n", stderr); */ /* fputs("Split left\n", stderr); */
if (0 if (0
...@@ -2058,6 +2068,14 @@ insert_right: ...@@ -2058,6 +2068,14 @@ insert_right:
right_block = block; right_block = block;
lock_update_split_left(right_block, left_block); lock_update_split_left(right_block, left_block);
#ifdef UNIV_BTR_AVOID_COPY
} else if (!split_rec) {
/* Instead of moving all records, make the new page
the empty page. */
left_block = new_block;
right_block = block;
#endif /* UNIV_BTR_AVOID_COPY */
} else { } else {
/* fputs("Split right\n", stderr); */ /* fputs("Split right\n", stderr); */
......
...@@ -205,6 +205,10 @@ operations (very slow); also UNIV_DEBUG must be defined */ ...@@ -205,6 +205,10 @@ operations (very slow); also UNIV_DEBUG must be defined */
adaptive hash index */ adaptive hash index */
#define UNIV_SRV_PRINT_LATCH_WAITS /* enable diagnostic output #define UNIV_SRV_PRINT_LATCH_WAITS /* enable diagnostic output
in sync0sync.c */ in sync0sync.c */
#define UNIV_BTR_AVOID_COPY /* when splitting B-tree nodes,
do not move any records when
all the records would
be moved */
#define UNIV_BTR_PRINT /* enable functions for #define UNIV_BTR_PRINT /* enable functions for
printing B-trees */ printing B-trees */
#define UNIV_ZIP_DEBUG /* extensive consistency checks #define UNIV_ZIP_DEBUG /* extensive consistency checks
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment