Optimizer Debugging With GDB
Some useful things for debugging optimizer code with gdb.
Useful Print Functions
dbug_print_item()
prints the contents of anItem
object into a buffer and returns pointer to it.dbug_print_sel_arg()
prints an individualSEL_ARG
object (NOT the whole graph or tree) and returns pointer to the buffer holding the printout.dbug_print_table_row
prints the current row buffer of the given table.- There are more
dbug_print_XX
functions 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
Other Settings
- May need to set innodb_fatal_semaphore_wait_threshold to be high enough?
See Also
Content reproduced on this site is the property of its respective owners,
and this content is not reviewed in advance by MariaDB. The views, information and opinions
expressed by this content do not necessarily represent those of MariaDB or any other party.