mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-18144: ANALYZE for statement support for PK filters
ANALYZE and ANALYZE FORMAT=JSON structures are changed in the way that they show additional information when rowid filter is used: - r_selectivity_pct - the observed filter selectivity - r_buffer_size - the size of the rowid filter container buffer - r_filling_time_ms - how long it took to fill rowid filter container New class Rowid_filter_tracker was added. This class is needed to collect data about how rowid filter is executed.
This commit is contained in:
@ -12619,6 +12619,18 @@ void JOIN_TAB::build_range_rowid_filter_if_needed()
|
||||
{
|
||||
if (rowid_filter && !is_rowid_filter_built)
|
||||
{
|
||||
/**
|
||||
The same handler object (table->file) is used to build a filter
|
||||
and to perfom a primary table access (by the main query).
|
||||
|
||||
To estimate the time for filter building tracker should be changed
|
||||
and after building of the filter has been finished it should be
|
||||
switched back to the previos tracker.
|
||||
*/
|
||||
Exec_time_tracker *table_tracker= table->file->get_time_tracker();
|
||||
Rowid_filter_tracker *rowid_tracker= rowid_filter->get_tracker();
|
||||
table->file->set_time_tracker(rowid_tracker->get_time_tracker());
|
||||
rowid_tracker->start_tracking();
|
||||
if (!rowid_filter->build())
|
||||
{
|
||||
is_rowid_filter_built= true;
|
||||
@ -12628,6 +12640,8 @@ void JOIN_TAB::build_range_rowid_filter_if_needed()
|
||||
delete rowid_filter;
|
||||
rowid_filter= 0;
|
||||
}
|
||||
rowid_tracker->stop_tracking();
|
||||
table->file->set_time_tracker(table_tracker);
|
||||
}
|
||||
}
|
||||
|
||||
@ -25408,8 +25422,10 @@ bool JOIN_TAB::save_explain_data(Explain_table_access *eta,
|
||||
erf->quick= quick->get_explain(thd->mem_root);
|
||||
erf->selectivity= range_rowid_filter_info->selectivity;
|
||||
erf->rows= quick->records;
|
||||
if (!(erf->tracker= new Rowid_filter_tracker(thd->lex->analyze_stmt)))
|
||||
return 1;
|
||||
rowid_filter->set_tracker(erf->tracker);
|
||||
eta->rowid_filter= erf;
|
||||
//psergey-todo: also do setup for ANALYZE here.
|
||||
}
|
||||
|
||||
if (tab_type == JT_NEXT)
|
||||
|
Reference in New Issue
Block a user