mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Table definition cache, part 2
The table opening process now works the following way: - Create common TABLE_SHARE object - Read the .frm file and unpack it into the TABLE_SHARE object - Create a TABLE object based on the information in the TABLE_SHARE object and open a handler to the table object Other noteworthy changes: - In TABLE_SHARE the most common strings are now LEX_STRING's - Better error message when table is not found - Variable table_cache is now renamed 'table_open_cache' - New variable 'table_definition_cache' that is the number of table defintions that will be cached - strxnmov() calls are now fixed to avoid overflows - strxnmov() will now always add one end \0 to result - engine objects are now created with a TABLE_SHARE object instead of a TABLE object. - After creating a field object one must call field->init(table) before using it - For a busy system this change will give you: - Less memory usage for table object - Faster opening of tables (if it's has been in use or is in table definition cache) - Allow you to cache many table definitions objects - Faster drop of table
This commit is contained in:
@ -658,7 +658,8 @@ void THD::add_changed_table(TABLE *table)
|
||||
|
||||
DBUG_ASSERT((options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) &&
|
||||
table->file->has_transactions());
|
||||
add_changed_table(table->s->table_cache_key, table->s->key_length);
|
||||
add_changed_table(table->s->table_cache_key.str,
|
||||
table->s->table_cache_key.length);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -1053,7 +1054,8 @@ static File create_file(THD *thd, char *path, sql_exchange *exchange,
|
||||
|
||||
if (!dirname_length(exchange->file_name))
|
||||
{
|
||||
strxnmov(path, FN_REFLEN, mysql_real_data_home, thd->db ? thd->db : "", NullS);
|
||||
strxnmov(path, FN_REFLEN-1, mysql_real_data_home, thd->db ? thd->db : "",
|
||||
NullS);
|
||||
(void) fn_format(path, exchange->file_name, path, "", option);
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user