From cab1dc628c116f042a3fd8dbc505f7ca2df599a3 Mon Sep 17 00:00:00 2001 From: "monty@mashka.mysql.fi" <> Date: Tue, 18 Nov 2003 13:47:27 +0200 Subject: CLIENT_MULTI_QUERIES -> CLIENT_MULTI_STATEMENTS New multi-key-cache handling. This was needed becasue the old one didn't work reliable with MERGE tables. ALTER TABLE table_name ... CHARACTER SET ... now changes all char/varchar/text columns to the given character set (One must use ALTER TABLE ... DEFAULT CHARACTER SET ... to change the default character set) Fixed that have_compress is detected properly (fixes problems with func_compress.test on platforms without zlib) New syntax for CACHE INDEX ('keys' is optional if no index name is given and one mentions the key cache name only ones) Removed compiler warnings Added mysql_set_server_option() to allow clients like PHP to easaily set/reset the multi-statement flag. --- sql/sql_test.cc | 81 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 30 deletions(-) (limited to 'sql/sql_test.cc') diff --git a/sql/sql_test.cc b/sql/sql_test.cc index c14d30f8d34..449c43c24d1 100644 --- a/sql/sql_test.cc +++ b/sql/sql_test.cc @@ -28,9 +28,6 @@ #include #endif -/* Intern key cache variables */ -extern "C" pthread_mutex_t THR_LOCK_keycache; - static const char *lock_descriptions[] = { "No lock", @@ -229,7 +226,9 @@ static int dl_compare(TABLE_LOCK_INFO *a,TABLE_LOCK_INFO *b) return 1; } -static void push_locks_into_array(DYNAMIC_ARRAY *ar, THR_LOCK_DATA *data, bool wait, const char *text) + +static void push_locks_into_array(DYNAMIC_ARRAY *ar, THR_LOCK_DATA *data, + bool wait, const char *text) { if (data) { @@ -238,31 +237,34 @@ static void push_locks_into_array(DYNAMIC_ARRAY *ar, THR_LOCK_DATA *data, bool w { TABLE_LOCK_INFO table_lock_info; table_lock_info.thread_id=table->in_use->thread_id; - memcpy(table_lock_info.table_name, table->table_cache_key, table->key_length); + memcpy(table_lock_info.table_name, table->table_cache_key, + table->key_length); table_lock_info.table_name[strlen(table_lock_info.table_name)]='.'; table_lock_info.waiting=wait; table_lock_info.lock_text=text; - table_lock_info.type=table->reginfo.lock_type; // obtainable also from THR_LOCK_DATA + // lock_type is also obtainable from THR_LOCK_DATA + table_lock_info.type=table->reginfo.lock_type; VOID(push_dynamic(ar,(gptr) &table_lock_info)); } } } -/* - Regarding MERGE tables: -For now, the best option is to use the common TABLE *pointer for all -cases; The drawback is that for MERGE tables we will see many locks -for the merge tables even if some of them are for individual tables. -The way to solve this is to add to 'THR_LOCK' structure a pointer to -the filename and use this when printing the data. -(We can for now ignore this and just print the same name for all merge -table parts; Please add the above as a comment to the display_lock -function so that we can easily add this if we ever need this. +/* + Regarding MERGE tables: + + For now, the best option is to use the common TABLE *pointer for all + cases; The drawback is that for MERGE tables we will see many locks + for the merge tables even if some of them are for individual tables. + The way to solve this is to add to 'THR_LOCK' structure a pointer to + the filename and use this when printing the data. + (We can for now ignore this and just print the same name for all merge + table parts; Please add the above as a comment to the display_lock + function so that we can easily add this if we ever need this. */ -static void display_table_locks (void) +static void display_table_locks(void) { LIST *list; DYNAMIC_ARRAY saved_table_locks; @@ -301,6 +303,36 @@ end: } +static int print_key_cache_status(const char *name, KEY_CACHE_VAR *key_cache) +{ + if (!key_cache->cache) + { + printf("%s: Not in use\n", name); + } + else + { + printf("%s\n\ +Buffer_size: %10lu\n\ +Block_size: %10lu\n\ +Division_limit: %10lu\n\ +Age_limit: %10lu\n\ +blocks used: %10lu\n\ +not flushed: %10lu\n\ +w_requests: %10lu\n\ +writes: %10lu\n\ +r_requests: %10lu\n\ +reads: %10lu\n\n", + name, + (ulong) key_cache->buff_size, key_cache->block_size, + key_cache->division_limit, key_cache->age_threshold, + key_cache->blocks_used,key_cache->blocks_changed, + key_cache->cache_w_requests,key_cache->cache_write, + key_cache->cache_r_requests,key_cache->cache_read); + } + return 0; +} + + void mysql_print_status(THD *thd) { char current_dir[FN_REFLEN]; @@ -320,19 +352,8 @@ void mysql_print_status(THD *thd) /* Print key cache status */ if (thd) thd->proc_info="key cache"; - pthread_mutex_lock(&THR_LOCK_keycache); - printf("key_cache status:\n\ -blocks used:%10lu\n\ -not flushed:%10lu\n\ -w_requests: %10lu\n\ -writes: %10lu\n\ -r_requests: %10lu\n\ -reads: %10lu\n", - dflt_key_cache_var.blocks_used,dflt_key_cache_var.blocks_changed, - dflt_key_cache_var.cache_w_requests,dflt_key_cache_var.cache_write, - dflt_key_cache_var.cache_r_requests,dflt_key_cache_var.cache_read); - pthread_mutex_unlock(&THR_LOCK_keycache); - + puts("\nKey caches:"); + process_key_caches(print_key_cache_status); if (thd) thd->proc_info="status"; pthread_mutex_lock(&LOCK_status); -- cgit v1.2.1