mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-7951 - sql_alloc() takes 0.25% in OLTP RO
sql_alloc() has additional costs compared to direct mem_root allocation: - function call: it is defined in a separate translation unit and can't be inlined - it needs to call pthread_getspecific() to get THD::mem_root It is called dozens of times implicitely at least by: - List<>::push_back() - List<>::push_front() - new (for Sql_alloc derived classes) - sql_memdup() Replaced lots of implicit sql_alloc() calls with direct mem_root allocation, passing through THD pointer whenever it is needed. Number of sql_alloc() calls reduced 345 -> 41 per OLTP RO transaction. pthread_getspecific() overhead dropped 0.76 -> 0.59 sql_alloc() overhed dropped 0.25 -> 0.06
This commit is contained in:
@ -7962,7 +7962,7 @@ bool setup_fields(THD *thd, Item **ref_pointer_array,
|
||||
RETURN pointer on pointer to next_leaf of last element
|
||||
*/
|
||||
|
||||
void make_leaves_list(List<TABLE_LIST> &list, TABLE_LIST *tables,
|
||||
void make_leaves_list(THD *thd, List<TABLE_LIST> &list, TABLE_LIST *tables,
|
||||
bool full_table_list, TABLE_LIST *boundary)
|
||||
|
||||
{
|
||||
@ -7978,12 +7978,12 @@ void make_leaves_list(List<TABLE_LIST> &list, TABLE_LIST *tables,
|
||||
tables/views were already prepared and has their leaf_tables
|
||||
set properly.
|
||||
*/
|
||||
make_leaves_list(list, select_lex->get_table_list(),
|
||||
make_leaves_list(thd, list, select_lex->get_table_list(),
|
||||
full_table_list, boundary);
|
||||
}
|
||||
else
|
||||
{
|
||||
list.push_back(table);
|
||||
list.push_back(table, thd->mem_root);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -8044,7 +8044,7 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
|
||||
leaves.empty();
|
||||
if (!select_lex->is_prep_leaf_list_saved)
|
||||
{
|
||||
make_leaves_list(leaves, tables, full_table_list, first_select_table);
|
||||
make_leaves_list(thd, leaves, tables, full_table_list, first_select_table);
|
||||
select_lex->leaf_tables_exec.empty();
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user