diff options
author | unknown <monty@donna.mysql.com> | 2001-01-28 21:41:10 +0200 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2001-01-28 21:41:10 +0200 |
commit | 0374dcdd9557002cc6e9747b28a4d01c9259ca6c (patch) | |
tree | 139475fd16658189e77529627fb94bbba4b777f1 /sql | |
parent | 184e24b2253a81b03476e3d4d8cf56d5eb9dbf18 (diff) | |
parent | 12fd55a5a65dd3d6e6f1ba883d20a86a74aa8d2d (diff) | |
download | mariadb-git-0374dcdd9557002cc6e9747b28a4d01c9259ca6c.tar.gz |
merge
myisam/mi_check.c:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/table.h:
Auto merged
Diffstat (limited to 'sql')
-rw-r--r-- | sql/mysql_priv.h | 4 | ||||
-rw-r--r-- | sql/mysqld.cc | 16 | ||||
-rw-r--r-- | sql/slave.cc | 9 | ||||
-rw-r--r-- | sql/sql_base.cc | 1 | ||||
-rw-r--r-- | sql/sql_parse.cc | 7 | ||||
-rw-r--r-- | sql/sql_repl.cc | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 29 | ||||
-rw-r--r-- | sql/table.h | 2 |
8 files changed, 61 insertions, 9 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index d3f208aa6de..4c83d70abf1 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -73,6 +73,7 @@ void kill_one_thread(THD *thd, ulong id); #ifndef MYSQLD_NET_RETRY_COUNT #define MYSQLD_NET_RETRY_COUNT 10 // Abort read after this many int. #endif +#define TEMP_POOL_SIZE 128 /* The following parameters is to decide when to use an extra cache to optimise seeks when reading a big table in sorted order */ #define MIN_FILE_LENGTH_TO_USE_ROW_CACHE (16L*1024*1024) @@ -507,7 +508,8 @@ extern ulong ha_read_count, ha_write_count, ha_delete_count, ha_update_count, ha_read_key_count, ha_read_next_count, ha_read_prev_count, ha_read_first_count, ha_read_last_count, ha_read_rnd_count, ha_read_rnd_next_count; - +extern uchar temp_pool[TEMP_POOL_SIZE]; +extern bool use_temp_pool; extern char f_fyllchar; extern uchar *days_in_month; extern DATE_FORMAT dayord; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 22e7f4859fb..07e0bd4131a 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -287,6 +287,9 @@ I_List<THD> threads,thread_cache; time_t start_time; +uchar temp_pool[TEMP_POOL_SIZE]; +bool use_temp_pool; + pthread_key(MEM_ROOT*,THR_MALLOC); pthread_key(THD*, THR_THD); pthread_key(NET*, THR_NET); @@ -1532,6 +1535,9 @@ int main(int argc, char **argv) if (!mysql_tmpdir || !mysql_tmpdir[0]) mysql_tmpdir=(char*) P_tmpdir; /* purecov: inspected */ + bzero(temp_pool, TEMP_POOL_SIZE); + use_temp_pool = 0; + set_options(); #ifdef __WIN__ /* service parameters can be overwritten by options */ @@ -2404,7 +2410,8 @@ enum options { OPT_INNOBASE_LOG_GROUP_HOME_DIR, OPT_INNOBASE_LOG_ARCH_DIR, OPT_INNOBASE_LOG_ARCHIVE, OPT_INNOBASE_FLUSH_LOG_AT_TRX_COMMIT, OPT_SAFE_SHOW_DB, - OPT_GEMINI_SKIP + OPT_GEMINI_SKIP, + OPT_TEMP_POOL }; static struct option long_options[] = { @@ -2535,6 +2542,7 @@ static struct option long_options[] = { #ifdef __WIN__ {"standalone", no_argument, 0, (int) OPT_STANDALONE}, #endif + {"temp-pool", no_argument, 0, (int) OPT_TEMP_POOL}, {"tmpdir", required_argument, 0, 't'}, {"use-locking", no_argument, 0, (int) OPT_USE_LOCKING}, #ifdef USE_SYMDIR @@ -2803,6 +2811,8 @@ struct show_var_st status_vars[]= { {"Sort_range", (char*) &filesort_range_count, SHOW_LONG}, {"Sort_rows", (char*) &filesort_rows, SHOW_LONG}, {"Sort_scan", (char*) &filesort_scan_count, SHOW_LONG}, + {"Table_locks_immediate", (char*) &locks_immediate, SHOW_LONG}, + {"Table_locks_waited", (char*) &locks_waited, SHOW_LONG}, {"Threads_cached", (char*) &cached_thread_count, SHOW_LONG_CONST}, {"Threads_created", (char*) &thread_created, SHOW_LONG_CONST}, {"Threads_connected", (char*) &thread_count, SHOW_INT_CONST}, @@ -2911,6 +2921,7 @@ static void usage(void) Don't give threads different priorities.\n\ --socket=... Socket file to use for connection\n\ -t, --tmpdir=path Path for temporary files\n\ + --temp-pool Use a pool of temporary files\n\ -u, --user=user_name Run mysqld daemon as user\n\ -V, --version output version information and exit"); #ifdef __WIN__ @@ -3086,6 +3097,9 @@ static void get_options(int argc,char **argv) case 't': mysql_tmpdir=optarg; break; + case OPT_TEMP_POOL: + use_temp_pool=1; + break; case 'u': mysqld_user=optarg; break; diff --git a/sql/slave.cc b/sql/slave.cc index 22d76c54ecd..5a110b6921b 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1055,9 +1055,12 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) break; case STOP_EVENT: - close_temporary_tables(thd); - mi->inc_pos(event_len); - flush_master_info(mi); + if(mi->pos > 4) // stop event should be ignored after rotate event + { + close_temporary_tables(thd); + mi->inc_pos(event_len); + flush_master_info(mi); + } delete ev; break; case ROTATE_EVENT: diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 96d6ea660aa..d69bc905c31 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1167,6 +1167,7 @@ bool wait_for_tables(THD *thd) /* Now we can open all tables without any interference */ thd->proc_info="Reopen tables"; result=reopen_tables(thd,0,0); + } pthread_mutex_unlock(&LOCK_open); thd->proc_info=0; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 495b00217ef..2926f59547f 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1886,6 +1886,13 @@ check_access(THD *thd,uint want_access,const char *db, uint *save_priv, if (db == any_db) return FALSE; // Allow select on anything + + if (strlen(db) > NAME_LEN || check_db_name(db)) + { + net_printf(&thd->net,ER_WRONG_DB_NAME, db); + return TRUE; + } + if (db && (!thd->db || strcmp(db,thd->db))) db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, thd->priv_user, db); /* purecov: inspected */ diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 590d25e3661..7730706f0d0 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -391,7 +391,7 @@ sweepstakes if you report the bug"; thd->mysys_var->current_mutex = log_lock; thd->mysys_var->current_cond = &COND_binlog_update; const char* proc_info = thd->proc_info; - thd->proc_info = "Waiting for update"; + thd->proc_info = "Slave connection: waiting for binlog update"; pthread_mutex_unlock(&thd->mysys_var->mutex); bool read_packet = 0, fatal_error = 0; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 526c78e0856..a3288540562 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -30,6 +30,7 @@ #include <hash.h> #include <ft_global.h> #include <assert.h> +#include <my_bitmap.h> const char *join_type_str[]={ "UNKNOWN","system","const","eq_ref","ref", "MAYBE_REF","ALL","range","index","fulltext" }; @@ -3287,14 +3288,28 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, KEY_PART_INFO *key_part_info; Item_result_field **copy_func; MI_COLUMNDEF *recinfo; + uint temp_pool_slot; + DBUG_ENTER("create_tmp_table"); DBUG_PRINT("enter",("distinct: %d save_sum_fields: %d allow_distinct_limit: %d group: %d", (int) distinct, (int) save_sum_fields, (int) allow_distinct_limit,test(group))); statistic_increment(created_tmp_tables, &LOCK_status); - sprintf(path,"%s%s%lx_%lx_%x",mysql_tmpdir,tmp_file_prefix,current_pid, - thd->thread_id, thd->tmp_table++); + + if(use_temp_pool) { + temp_pool_slot = bitmap_set_next(temp_pool, TEMP_POOL_SIZE); + if(temp_pool_slot != MY_BIT_NONE) // we got a slot + sprintf(path, "%s%s_%lx_%i", mysql_tmpdir, tmp_file_prefix, + current_pid, temp_pool_slot); + else // if we run out of slots in the pool, fall back to old behavior + sprintf(path,"%s%s%lx_%lx_%x",mysql_tmpdir,tmp_file_prefix,current_pid, + thd->thread_id, thd->tmp_table++); + } else { + sprintf(path,"%s%s%lx_%lx_%x",mysql_tmpdir,tmp_file_prefix,current_pid, + thd->thread_id, thd->tmp_table++); + }; + if (group) { if (!param->quick_group) @@ -3324,10 +3339,12 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, param->group_length : 0, NullS)) { + bitmap_clear_bit(temp_pool, TEMP_POOL_SIZE, temp_pool_slot); DBUG_RETURN(NULL); /* purecov: inspected */ } if (!(param->copy_field=copy=new Copy_field[field_count])) { + bitmap_clear_bit(temp_pool, TEMP_POOL_SIZE, temp_pool_slot); my_free((gptr) table,MYF(0)); /* purecov: inspected */ DBUG_RETURN(NULL); /* purecov: inspected */ } @@ -3347,6 +3364,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, table->map=1; table->tmp_table=1; table->db_low_byte_first=1; // True for HEAP and MyISAM + table->temp_pool_slot = temp_pool_slot; + /* Calculate which type of fields we will store in the temporary table */ @@ -3670,7 +3689,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, DBUG_RETURN(table); err: - free_tmp_table(thd,table); /* purecov: inspected */ + free_tmp_table(thd,table); /* purecov: inspected */ + bitmap_clear_bit(temp_pool, TEMP_POOL_SIZE, temp_pool_slot); DBUG_RETURN(NULL); /* purecov: inspected */ } @@ -3817,6 +3837,9 @@ free_tmp_table(THD *thd, TABLE *entry) delete *ptr; my_free((gptr) entry->record[0],MYF(0)); free_io_cache(entry); + + bitmap_clear_bit(temp_pool, TEMP_POOL_SIZE, entry->temp_pool_slot); + my_free((gptr) entry,MYF(0)); thd->proc_info=save_proc_info; diff --git a/sql/table.h b/sql/table.h index c17a1eca830..a3b361742c5 100644 --- a/sql/table.h +++ b/sql/table.h @@ -120,6 +120,8 @@ struct st_table { key_part_map const_key_parts[MAX_KEY]; ulong query_id; + uint temp_pool_slot; + THD *in_use; /* Which thread uses this */ struct st_table *next,*prev; }; |