diff options
author | unknown <monty@mashka.mysql.fi> | 2002-11-20 22:56:57 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2002-11-20 22:56:57 +0200 |
commit | 9b9546edbc095e061167588f672549103627bf98 (patch) | |
tree | 1deb846a75b9e1e5c1491e20df66b4d74fc6fa0b /sql | |
parent | 33d678fcdc2d0b431c0f08e11e0b6715cd37cda0 (diff) | |
download | mariadb-git-9b9546edbc095e061167588f672549103627bf98.tar.gz |
Try to optimize the cache buffer size needed for bulk_insert
Fix for shutdown on Mac OS X
include/my_tree.h:
Try to optimize the cache buffer size needed for bulk_insert
myisam/mi_write.c:
Try to optimize the cache buffer size needed for bulk_insert
mysql-test/r/bdb.result:
Make test repeatable
mysql-test/t/bdb.test:
Make test repeatable
mysys/tree.c:
Try to optimize the cache buffer size needed for bulk_insert
sql/mysql_priv.h:
Small optimization
sql/mysqld.cc:
Fix for shutdown on Mac OS X
sql/sql_insert.cc:
Try to optimize the cache buffer size needed for bulk_insert
sql/sql_yacc.yy:
Call thd->strmake() instead of sql_strmake()
sql/table.cc:
Try to optimize the cache buffer size needed for bulk_insert
sql/table.h:
Try to optimize the cache buffer size needed for bulk_insert
Diffstat (limited to 'sql')
-rw-r--r-- | sql/mysql_priv.h | 3 | ||||
-rw-r--r-- | sql/mysqld.cc | 21 | ||||
-rw-r--r-- | sql/sql_insert.cc | 10 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 9 | ||||
-rw-r--r-- | sql/table.cc | 3 | ||||
-rw-r--r-- | sql/table.h | 1 |
6 files changed, 36 insertions, 11 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index db457aa0aa7..43de81cae00 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -83,6 +83,7 @@ char* query_table_status(THD *thd,const char *db,const char *table_name); */ #define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (16L*1024*1024) #define MIN_ROWS_TO_USE_TABLE_CACHE 100 +#define MIN_ROWS_TO_USE_BULK_INSERT 100 /* The following is used to decide if MySQL should use table scanning @@ -707,7 +708,7 @@ bool wait_for_locked_table_names(THD *thd, TABLE_LIST *table_list); /* old unireg functions */ void unireg_init(ulong options); -void unireg_end(int signal); +void unireg_end(void); int rea_create_table(my_string file_name,HA_CREATE_INFO *create_info, List<create_field> &create_field, uint key_count,KEY *key_info); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 2404b35b00f..ffe3d1be47c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -764,7 +764,7 @@ static void __cdecl kill_server(int sig_ptr) if (sig != MYSQL_KILL_SIGNAL && sig != 0) unireg_abort(1); /* purecov: inspected */ else - unireg_end(0); + unireg_end(); pthread_exit(0); /* purecov: deadcode */ RETURN_FROM_KILL_SERVER; } @@ -803,12 +803,29 @@ extern "C" sig_handler print_signal_warning(int sig) #endif } +/* + cleanup all memory and end program nicely + + SYNOPSIS + unireg_end() + + NOTES + This function never returns. + + If SIGNALS_DONT_BREAK_READ is defined, this function is called + by the main thread. To get MySQL to shut down nicely in this case + (Mac OS X) we have to call exit() instead if pthread_exit(). +*/ -void unireg_end(int signal_number __attribute__((unused))) +void unireg_end(void) { clean_up(); my_thread_end(); +#ifdef SIGNALS_DONT_BREAK_READ + exit(0); +#else pthread_exit(0); // Exit is in main thread +#endif } diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 71f570e4798..2508314c469 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -194,15 +194,19 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields, thd->proc_info="update"; if (duplic == DUP_IGNORE || duplic == DUP_REPLACE) table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); - if ((bulk_insert= (values_list.elements > 1 && + if ((bulk_insert= (values_list.elements >= MIN_ROWS_TO_USE_BULK_INSERT && lock_type != TL_WRITE_DELAYED && !(specialflag & SPECIAL_SAFE_MODE)))) { table->file->extra_opt(HA_EXTRA_WRITE_CACHE, - thd->variables.read_buff_size); + min(thd->variables.read_buff_size, + table->avg_row_length*values_list.elements)); if (thd->variables.bulk_insert_buff_size) table->file->extra_opt(HA_EXTRA_BULK_INSERT_BEGIN, - thd->variables.bulk_insert_buff_size); + min(thd->variables.bulk_insert_buff_size, + (table->total_key_length + + table->keys * TREE_ELEMENT_EXTRA_SIZE)* + values_list.elements)); table->bulk_insert= 1; } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 92b49549a06..f6a0c483bb9 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3107,12 +3107,13 @@ ident: IDENT { $$=$1; } | keyword { - LEX *lex; - $$.str=sql_strmake($1.str,$1.length); + LEX *lex= Lex; + $$.str= lex->thd->strmake($1.str,$1.length); $$.length=$1.length; - if ((lex=Lex)->next_state != STATE_END) + if (lex->next_state != STATE_END) lex->next_state=STATE_OPERATOR_OR_IDENT; - }; + } + ; ident_or_text: ident { $$=$1;} diff --git a/sql/table.cc b/sql/table.cc index b68edac5fc2..62163819599 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -143,7 +143,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, goto err_not_open; /* purecov: inspected */ bzero((char*) keyinfo,n_length); outparam->key_info=keyinfo; - outparam->max_key_length=0; + outparam->max_key_length= outparam->total_key_length= 0; key_part= (KEY_PART_INFO*) (keyinfo+keys); strpos=disk_buff+6; @@ -201,6 +201,7 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, } set_if_bigger(outparam->max_key_length,keyinfo->key_length+ keyinfo->key_parts); + outparam->total_key_length+= keyinfo->key_length; if (keyinfo->flags & HA_NOSAME) set_if_bigger(outparam->max_unique_length,keyinfo->key_length); } diff --git a/sql/table.h b/sql/table.h index ca86269b625..f998a0fd4e6 100644 --- a/sql/table.h +++ b/sql/table.h @@ -58,6 +58,7 @@ struct st_table { uint reclength; /* Recordlength */ uint rec_buff_length; uint keys,key_parts,primary_key,max_key_length,max_unique_length; + uint total_key_length; uint uniques; uint null_fields; /* number of null fields */ uint blob_fields; /* number of blob fields */ |