Optimizer Debugging With GDB
Some useful things for debugging optimizer code with gdb.
Useful Print Functions
dbug_print_item()prints the contents of an
Itemobject into a buffer and returns pointer to it.
dbug_print_sel_arg()prints an individual
SEL_ARGobject (NOT the whole graph or tree) and returns pointer to the buffer holding the printout.
dbug_print_table_rowprints the current row buffer of the given table.
- There are more
dbug_print_XXfunctions for various data structures
Printing the Optimizer Trace
The optimizer trace is collected as plain text. One can print the contents of the trace collected so far as follows:
printf "%s\n", thd->opt_trace->current_trace->current_json->output.str.Ptr
Starting from 11.0, there is
dbug_print_opt_trace() function which one call from gdb.
Printing Current Partial Join Prefix
best_access_path() is a function that adds another table to the join prefix.
When in or around that function, the following can be useful:
A macro to print the join prefix already constructed:
define bap_print_prefix set $i=0 while ($i < idx) p join->positions[$i++].table->table->alias.Ptr end end
- May need to set innodb_fatal_semaphore_wait_threshold to be high enough?