Server IP : 185.86.78.101 / Your IP : 216.73.216.213 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/server/mysql/mysql-test/include/ |
Upload File : |
# Prerequisites: # connections: # cq - connection where queries are run # ce - connection where explain is run # variables: # query - query to explain # format - explain format: 'json' for json, or traditional otherwise # point - syncing point # replace - a string that will be used by replace_regex to mask instabilities --disable_reconnect --disable_query_log --enable_result_log if ($format == 'json') { let $fmt= FORMAT=JSON; } if ($format != 'json') { let $fmt= FORMAT=TRADITIONAL; } connection cq; SET DEBUG_SYNC= 'RESET'; # Grab output of regular explain --replace_regex $replace --output $MYSQL_TMP_DIR/EN eval EXPLAIN $fmt $query; # Grap output of EXPLAIN FOR CONNECTION let $QID= `SELECT CONNECTION_ID()`; eval SET DEBUG_SYNC= '$point SIGNAL ready_for_explain WAIT_FOR explained'; send_eval $query; connection ce; # Let the query reach sync point (i.e pass optimization and prepare plan) SET DEBUG_SYNC= 'now WAIT_FOR ready_for_explain'; SET DEBUG_SYNC= 'after_explain_other SIGNAL explained'; --replace_regex $replace --output $MYSQL_TMP_DIR/EO eval EXPLAIN $fmt FOR CONNECTION $QID; connection cq; --disable_result_log reap; --enable_result_log SET DEBUG_SYNC= 'RESET'; --error 0,1,2 --exec diff -U 1 $MYSQL_TMP_DIR/EN $MYSQL_TMP_DIR/EO > $MYSQL_TMP_DIR/ED; let $status= $__error; if ($status == 2) { die "Error from diff"; } if ($status) { echo QUERY: $query; echo STATUS:NOT_EQUAL; echo SYNC_POINT:$point; echo Diff: EXPLAIN NORMAL vs OTHER; --exec grep -v -e "---" -e "+++" $MYSQL_TMP_DIR/ED; } if (!$status) { echo QUERY: $query; echo STATUS: EQUAL; } remove_file $MYSQL_TMP_DIR/EN; remove_file $MYSQL_TMP_DIR/EO; remove_file $MYSQL_TMP_DIR/ED; --disable_result_log