mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
292f6568fa
tmp_table_size can now be set to 0 (to disable in memory internal temp tables) Improved speed for internal Maria temp tables: - Don't use packed keys, except with long text fields. - Don't copy key all accessed pages during key search. Some new benchmark tests to sql-bench (for group by) BUILD/compile-pentium64-gcov: Update script to use same pentium_config flags as other tests BUILD/compile-pentium64-gprof: Update script to use same pentium_config flags as other tests include/my_sys.h: Added count of my_sync calls mysql-test/r/variables.result: tmp_table_size can now be set to 0 sql-bench/test-select.sh: Added some new test for GROUP BY on a not key field and group by with different order by sql/mysqld.cc: Added count of my_sync calls tmp_table_size can now be set to 0 (to disable in memory internal temp tables) sql/sql_select.cc: If tmp_table_size is 0, don't use in memory temp tables (good for benchmarking MyISAM/Maria temp tables) Don't pack keys for Maria tables; The 8K page size makes packed keys too slow for temp tables. storage/maria/ma_key_recover.h: Moved definition to maria_def.h storage/maria/ma_page.c: Moved code used to simplify comparing of identical Maria tables to own function (page_cleanup()) Fixed that one can read a page with a read lock. storage/maria/ma_rkey.c: For not exact key reads, cache the page where we found key (to speed up future read-next/read-prev calls) storage/maria/ma_search.c: Moved code to cache last key page to separate function. Instead of copying pages, only get a link to the page. This notable speeds up key searches on bigger tables. storage/maria/ma_write.c: Added comment storage/maria/maria_def.h: Moved page_cleanup() to separate function.
111 lines
4.6 KiB
C
111 lines
4.6 KiB
C
/* Copyright (C) 2007 Michael Widenius
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
/*
|
|
When we have finished the write/update/delete of a row, we have cleanups to
|
|
do. For now it is signalling to Checkpoint that all dirtied pages have
|
|
their rec_lsn set and page LSN set (_ma_unpin_all_pages() has been called),
|
|
and that bitmap pages are correct (_ma_bitmap_release_unused() has been
|
|
called).
|
|
*/
|
|
|
|
/* Struct for clr_end */
|
|
|
|
struct st_msg_to_write_hook_for_clr_end
|
|
{
|
|
LSN previous_undo_lsn;
|
|
enum translog_record_type undone_record_type;
|
|
ha_checksum checksum_delta;
|
|
void *extra_msg;
|
|
};
|
|
|
|
struct st_msg_to_write_hook_for_undo_key
|
|
{
|
|
my_off_t *root;
|
|
my_off_t value;
|
|
uint keynr;
|
|
ulonglong auto_increment;
|
|
};
|
|
|
|
|
|
/* Function definitions for some redo functions */
|
|
|
|
my_bool _ma_write_clr(MARIA_HA *info, LSN undo_lsn,
|
|
enum translog_record_type undo_type,
|
|
my_bool store_checksum, ha_checksum checksum,
|
|
LSN *res_lsn, void *extra_msg);
|
|
int _ma_write_undo_key_insert(MARIA_HA *info, const MARIA_KEY *key,
|
|
my_off_t *root, my_off_t new_root,
|
|
LSN *res_lsn);
|
|
my_bool _ma_write_undo_key_delete(MARIA_HA *info, const MARIA_KEY *key,
|
|
my_off_t new_root, LSN *res_lsn);
|
|
my_bool write_hook_for_clr_end(enum translog_record_type type,
|
|
TRN *trn, MARIA_HA *tbl_info, LSN *lsn,
|
|
void *hook_arg);
|
|
extern my_bool write_hook_for_undo_key(enum translog_record_type type,
|
|
TRN *trn, MARIA_HA *tbl_info,
|
|
LSN *lsn, void *hook_arg);
|
|
extern my_bool write_hook_for_undo_key_insert(enum translog_record_type type,
|
|
TRN *trn, MARIA_HA *tbl_info,
|
|
LSN *lsn, void *hook_arg);
|
|
extern my_bool write_hook_for_undo_key_delete(enum translog_record_type type,
|
|
TRN *trn, MARIA_HA *tbl_info,
|
|
LSN *lsn, void *hook_arg);
|
|
|
|
my_bool _ma_log_prefix(MARIA_PAGE *page, uint changed_length, int move_length);
|
|
my_bool _ma_log_suffix(MARIA_PAGE *page, uint org_length,
|
|
uint new_length);
|
|
my_bool _ma_log_add(MARIA_PAGE *page, uint buff_length, uchar *key_pos,
|
|
uint changed_length, int move_length,
|
|
my_bool handle_overflow);
|
|
my_bool _ma_log_delete(MARIA_PAGE *page, const uchar *key_pos,
|
|
uint changed_length, uint move_length);
|
|
my_bool _ma_log_change(MARIA_PAGE *page, const uchar *key_pos, uint length);
|
|
my_bool _ma_log_new(MARIA_PAGE *page, my_bool root_page);
|
|
|
|
uint _ma_apply_redo_index_new_page(MARIA_HA *info, LSN lsn,
|
|
const uchar *header, uint length);
|
|
uint _ma_apply_redo_index_free_page(MARIA_HA *info, LSN lsn,
|
|
const uchar *header);
|
|
uint _ma_apply_redo_index(MARIA_HA *info,
|
|
LSN lsn, const uchar *header, uint length);
|
|
|
|
my_bool _ma_apply_undo_key_insert(MARIA_HA *info, LSN undo_lsn,
|
|
const uchar *header, uint length);
|
|
my_bool _ma_apply_undo_key_delete(MARIA_HA *info, LSN undo_lsn,
|
|
const uchar *header, uint length,
|
|
my_bool with_root);
|
|
|
|
static inline void _ma_finalize_row(MARIA_HA *info)
|
|
{
|
|
info->trn->rec_lsn= LSN_IMPOSSIBLE;
|
|
}
|
|
|
|
/* unpinning is often the last operation before finalizing */
|
|
|
|
static inline void _ma_unpin_all_pages_and_finalize_row(MARIA_HA *info,
|
|
LSN undo_lsn)
|
|
{
|
|
_ma_unpin_all_pages(info, undo_lsn);
|
|
_ma_finalize_row(info);
|
|
}
|
|
|
|
extern my_bool _ma_lock_key_del(MARIA_HA *info, my_bool insert_at_end);
|
|
extern void _ma_unlock_key_del(MARIA_HA *info);
|
|
static inline void _ma_fast_unlock_key_del(MARIA_HA *info)
|
|
{
|
|
if (info->key_del_used)
|
|
_ma_unlock_key_del(info);
|
|
}
|