1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

cleanup: Don't pass THD to get_merge_many_buff_cost_fast

We can pass the cost directly.

Reviewer: Monty
This commit is contained in:
Vicențiu Ciorbaru
2022-06-30 14:48:00 +03:00
committed by Sergei Petrunia
parent ca2851d17e
commit 06be2c64bc
3 changed files with 26 additions and 20 deletions

View File

@@ -27,12 +27,15 @@ PSI_memory_key key_memory_Filesort_buffer_sort_keys;
A local helper function. See comments for get_merge_buffers_cost().
*/
static double get_merge_cost(double rowid_compare_cost, ha_rows num_elements,
ha_rows num_buffers, uint elem_size)
static
double get_merge_cost(ha_rows num_elements,
ha_rows num_buffers,
uint elem_size,
double key_compare_cost)
{
return (2.0 * ((double) num_elements * elem_size) / IO_SIZE
+ (double) num_elements * log((double) num_buffers) *
rowid_compare_cost / M_LN2);
key_compare_cost / M_LN2);
}
/**
@@ -43,19 +46,19 @@ static double get_merge_cost(double rowid_compare_cost, ha_rows num_elements,
TODO: Use this function for Unique::get_use_cost().
*/
double get_merge_many_buffs_cost_fast(THD *thd,
ha_rows num_rows,
double get_merge_many_buffs_cost_fast(ha_rows num_rows,
ha_rows num_keys_per_buffer,
uint elem_size)
uint elem_size,
double key_compare_cost)
{
ha_rows num_buffers= num_rows / num_keys_per_buffer;
ha_rows last_n_elems= num_rows % num_keys_per_buffer;
double total_cost, rowid_compare_cost= ROWID_COMPARE_COST_THD(thd);
double total_cost;
// Calculate CPU cost of sorting buffers.
total_cost=
((num_buffers * num_keys_per_buffer * log(1.0 + num_keys_per_buffer) +
last_n_elems * log(1.0 + last_n_elems)) * rowid_compare_cost);
last_n_elems * log(1.0 + last_n_elems)) * key_compare_cost);
// Simulate behavior of merge_many_buff().
while (num_buffers >= MERGEBUFF2)
@@ -69,16 +72,16 @@ double get_merge_many_buffs_cost_fast(THD *thd,
// Cost of merge sort 'num_merge_calls'.
total_cost+=
num_merge_calls *
get_merge_cost(rowid_compare_cost, num_keys_per_buffer * MERGEBUFF,
MERGEBUFF, elem_size);
get_merge_cost(num_keys_per_buffer * MERGEBUFF, MERGEBUFF, elem_size,
key_compare_cost);
// # of records in remaining buffers.
last_n_elems+= num_remaining_buffs * num_keys_per_buffer;
// Cost of merge sort of remaining buffers.
total_cost+=
get_merge_cost(rowid_compare_cost, last_n_elems, 1 + num_remaining_buffs,
elem_size);
get_merge_cost(last_n_elems, 1 + num_remaining_buffs, elem_size,
key_compare_cost);
num_buffers= num_merge_calls;
num_keys_per_buffer*= MERGEBUFF;
@@ -86,8 +89,8 @@ double get_merge_many_buffs_cost_fast(THD *thd,
// Simulate final merge_buff call.
last_n_elems+= num_keys_per_buffer * num_buffers;
total_cost+= get_merge_cost(rowid_compare_cost, last_n_elems, 1 + num_buffers,
elem_size);
total_cost+= get_merge_cost(last_n_elems, 1 + num_buffers, elem_size,
key_compare_cost);
return total_cost;
}