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.
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
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