diff options
author | unknown <heikki@hundin.mysql.fi> | 2003-01-06 22:07:25 +0200 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2003-01-06 22:07:25 +0200 |
commit | 9497c997041e20baab3ebaa985c9e29235fdf0ca (patch) | |
tree | 88f03b8d4b471aa94f27b4a3ed510bcd7c2c3ccb /innobase/btr | |
parent | ef62b4c948d68108c0945ebde33540b03b392a6d (diff) | |
download | mariadb-git-9497c997041e20baab3ebaa985c9e29235fdf0ca.tar.gz |
buf0buf.c, buf0buf.ic, buf0buf.h:
Reduce memory usage of the buffer headers
Many files:
Merge InnoDB-4.1 with AWE support
sql/mysqld.cc:
Merge InnoDB-4.1 with AWE support
sql/set_var.cc:
Merge InnoDB-4.1 with AWE support
sql/ha_innodb.h:
Merge InnoDB-4.1 with AWE support
sql/ha_innodb.cc:
Merge InnoDB-4.1 with AWE support
innobase/btr/btr0cur.c:
Merge InnoDB-4.1 with AWE support
innobase/btr/btr0pcur.c:
Merge InnoDB-4.1 with AWE support
innobase/buf/buf0flu.c:
Merge InnoDB-4.1 with AWE support
innobase/buf/buf0lru.c:
Merge InnoDB-4.1 with AWE support
innobase/buf/buf0rea.c:
Merge InnoDB-4.1 with AWE support
innobase/include/btr0pcur.h:
Merge InnoDB-4.1 with AWE support
innobase/include/buf0lru.h:
Merge InnoDB-4.1 with AWE support
innobase/include/log0recv.h:
Merge InnoDB-4.1 with AWE support
innobase/include/os0proc.h:
Merge InnoDB-4.1 with AWE support
innobase/include/srv0srv.h:
Merge InnoDB-4.1 with AWE support
innobase/log/log0log.c:
Merge InnoDB-4.1 with AWE support
innobase/log/log0recv.c:
Merge InnoDB-4.1 with AWE support
innobase/os/os0file.c:
Merge InnoDB-4.1 with AWE support
innobase/os/os0proc.c:
Merge InnoDB-4.1 with AWE support
innobase/srv/srv0srv.c:
Merge InnoDB-4.1 with AWE support
innobase/srv/srv0start.c:
Merge InnoDB-4.1 with AWE support
innobase/trx/trx0sys.c:
Merge InnoDB-4.1 with AWE support
innobase/trx/trx0trx.c:
Merge InnoDB-4.1 with AWE support
innobase/ut/ut0ut.c:
Merge InnoDB-4.1 with AWE support
innobase/include/buf0buf.h:
Reduce memory usage of the buffer headers
innobase/include/buf0buf.ic:
Reduce memory usage of the buffer headers
innobase/buf/buf0buf.c:
Reduce memory usage of the buffer headers
Diffstat (limited to 'innobase/btr')
-rw-r--r-- | innobase/btr/btr0cur.c | 7 | ||||
-rw-r--r-- | innobase/btr/btr0pcur.c | 42 |
2 files changed, 37 insertions, 12 deletions
diff --git a/innobase/btr/btr0cur.c b/innobase/btr/btr0cur.c index 24f0447d55d..e1d12c9adc4 100644 --- a/innobase/btr/btr0cur.c +++ b/innobase/btr/btr0cur.c @@ -291,6 +291,7 @@ btr_cur_search_to_nth_level( && latch_mode <= BTR_MODIFY_LEAF && info->last_hash_succ && !estimate && mode != PAGE_CUR_LE_OR_EXTENDS + && srv_use_adaptive_hash_indexes && btr_search_guess_on_hash(index, info, tuple, mode, latch_mode, cursor, has_search_latch, mtr)) { @@ -495,9 +496,11 @@ retry_page_get: cursor->up_bytes = up_bytes; #ifdef BTR_CUR_ADAPT - btr_search_info_update(index, cursor); -#endif + if (srv_use_adaptive_hash_indexes) { + btr_search_info_update(index, cursor); + } +#endif ut_ad(cursor->up_match != ULINT_UNDEFINED || mode != PAGE_CUR_GE); ut_ad(cursor->up_match != ULINT_UNDEFINED diff --git a/innobase/btr/btr0pcur.c b/innobase/btr/btr0pcur.c index b2115dfdd6c..13efacb9da3 100644 --- a/innobase/btr/btr0pcur.c +++ b/innobase/btr/btr0pcur.c @@ -95,7 +95,9 @@ btr_pcur_store_position( ut_a(cursor->latch_mode != BTR_NO_LATCHES); if (page_get_n_recs(page) == 0) { - /* It must be an empty index tree */ + /* It must be an empty index tree; NOTE that in this case + we do not store the modify_clock, but always do a search + if we restore the cursor position */ ut_a(btr_page_get_next(page, mtr) == FIL_NULL && btr_page_get_prev(page, mtr) == FIL_NULL); @@ -128,12 +130,13 @@ btr_pcur_store_position( } else { cursor->rel_pos = BTR_PCUR_ON; } - + cursor->old_stored = BTR_PCUR_OLD_STORED; cursor->old_rec = dict_tree_copy_rec_order_prefix(tree, rec, &(cursor->old_rec_buf), &(cursor->buf_size)); + cursor->block_when_stored = buf_block_align(page); cursor->modify_clock = buf_frame_get_modify_clock(page); } @@ -205,6 +208,9 @@ btr_pcur_restore_position( if (cursor->rel_pos == BTR_PCUR_AFTER_LAST_IN_TREE || cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE) { + /* In these cases we do not try an optimistic restoration, + but always do a search */ + if (cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE) { from_left = TRUE; } else { @@ -214,6 +220,10 @@ btr_pcur_restore_position( btr_cur_open_at_index_side(from_left, btr_pcur_get_btr_cur(cursor)->index, latch_mode, btr_pcur_get_btr_cur(cursor), mtr); + + cursor->block_when_stored = + buf_block_align(btr_pcur_get_page(cursor)); + return(FALSE); } @@ -224,8 +234,9 @@ btr_pcur_restore_position( if (latch_mode == BTR_SEARCH_LEAF || latch_mode == BTR_MODIFY_LEAF) { /* Try optimistic restoration */ - if (buf_page_optimistic_get(latch_mode, page, - cursor->modify_clock, mtr)) { + if (buf_page_optimistic_get(latch_mode, + cursor->block_when_stored, page, + cursor->modify_clock, mtr)) { cursor->pos_state = BTR_PCUR_IS_POSITIONED; buf_page_dbg_add_level(page, SYNC_TREE_NODE); @@ -270,8 +281,6 @@ btr_pcur_restore_position( btr_pcur_open_with_no_init(btr_pcur_get_btr_cur(cursor)->index, tuple, mode, latch_mode, cursor, 0, mtr); - - cursor->old_stored = BTR_PCUR_OLD_STORED; /* Restore the old search mode */ cursor->search_mode = old_mode; @@ -280,11 +289,18 @@ btr_pcur_restore_position( && btr_pcur_is_on_user_rec(cursor, mtr) && 0 == cmp_dtuple_rec(tuple, btr_pcur_get_rec(cursor))) { - /* We have to store the NEW value for the modify clock, since - the cursor can now be on a different page! */ + /* We have to store the NEW value for the modify clock, since + the cursor can now be on a different page! But we can retain + the value of old_rec */ + + cursor->modify_clock = + buf_frame_get_modify_clock(btr_pcur_get_page(cursor)); + + cursor->block_when_stored = + buf_block_align(btr_pcur_get_page(cursor)); + + cursor->old_stored = BTR_PCUR_OLD_STORED; - cursor->modify_clock = buf_frame_get_modify_clock( - buf_frame_align(btr_pcur_get_rec(cursor))); mem_heap_free(heap); return(TRUE); @@ -292,6 +308,12 @@ btr_pcur_restore_position( mem_heap_free(heap); + /* We have to store new position information, modify_clock etc., + to the cursor because it can now be on a different page, the record + under it may have been removed, etc. */ + + btr_pcur_store_position(cursor, mtr); + return(FALSE); } |