1
0
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:
Galina Shalygina
2019-02-06 23:40:07 +03:00
parent e299ae5b07
commit 447e0f023f
11 changed files with 636 additions and 14 deletions

View File

@ -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)