From e8ad42955d49e37adf632e029d6693791f9f905e Mon Sep 17 00:00:00 2001 From: guriandoro Date: Wed, 22 Mar 2017 10:53:34 -0400 Subject: [PATCH 1/6] PT-90 Adding collect for LP:1642750 pt-stalk will now also collect from P_S.prepared_statements_instances --- lib/bash/collect.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/bash/collect.sh b/lib/bash/collect.sh index 8f68a615..09ad96f6 100644 --- a/lib/bash/collect.sh +++ b/lib/bash/collect.sh @@ -100,9 +100,7 @@ collect() { $CMD_MYSQLADMIN $EXT_ARGV debug else log "Could not find the MySQL error log" - fi - - + fi # Get a sample of these right away, so we can get these without interaction # with the other commands we're about to run. if [ "${mysql_version}" '>' "5.1" ]; then @@ -251,6 +249,10 @@ collect() { ps_locks_transactions "$d/$p-ps-locks-transactions" fi + if [ "${mysql_version}" '>' "5.6" ]; then + (echo $ts; ps_prepared_statements) >> "$d/$p-prepared-statements" & + fi + curr_time=$(date +'%s') done log "Loop end: $(date +'TS %s.%N %F %T')" @@ -427,6 +429,14 @@ ps_locks_transactions() { } +ps_prepared_statements() { + $CMD_MYSQL $EXT_ARGV -e "SELECT t.processlist_id, pse.* \ + FROM performance_schema.prepared_statements_instances pse \ + JOIN performance_schema.threads t \ + ON (pse.OWNER_THREAD_ID=t.thread_id)\G" +} + + # ########################################################################### # End collect package # ########################################################################### From cae47b4fb113675a33efc310a3d3969be01fb5d1 Mon Sep 17 00:00:00 2001 From: guriandoro Date: Wed, 22 Mar 2017 11:03:05 -0400 Subject: [PATCH 2/6] PT-90 Ran util/update command to add changes to bin ~/perldev/percona-toolkit $ ./util/update-modules bin/pt-stalk collect --- bin/pt-stalk | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/pt-stalk b/bin/pt-stalk index cb3e5e5c..80d84990 100755 --- a/bin/pt-stalk +++ b/bin/pt-stalk @@ -832,9 +832,7 @@ collect() { $CMD_MYSQLADMIN $EXT_ARGV debug else log "Could not find the MySQL error log" - fi - - + fi if [ "${mysql_version}" '>' "5.1" ]; then local mutex="SHOW ENGINE INNODB MUTEX" else @@ -959,6 +957,10 @@ collect() { ps_locks_transactions "$d/$p-ps-locks-transactions" fi + if [ "${mysql_version}" '>' "5.6" ]; then + (echo $ts; ps_prepared_statements) >> "$d/$p-prepared-statements" & + fi + curr_time=$(date +'%s') done log "Loop end: $(date +'TS %s.%N %F %T')" @@ -1123,6 +1125,14 @@ ps_locks_transactions() { } +ps_prepared_statements() { + $CMD_MYSQL $EXT_ARGV -e "SELECT t.processlist_id, pse.* \ + FROM performance_schema.prepared_statements_instances pse \ + JOIN performance_schema.threads t \ + ON (pse.OWNER_THREAD_ID=t.thread_id)\G" +} + + # ########################################################################### # End collect package # ########################################################################### From 00cb8d68744fb1bbb8fe1f806c42d6e53cc0c17f Mon Sep 17 00:00:00 2001 From: guriandoro Date: Wed, 22 Mar 2017 11:37:09 -0400 Subject: [PATCH 3/6] PT-90 Adding test for new changes --- t/pt-stalk/pt-stalk.t | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/t/pt-stalk/pt-stalk.t b/t/pt-stalk/pt-stalk.t index 32d6c203..9d9ac2c5 100644 --- a/t/pt-stalk/pt-stalk.t +++ b/t/pt-stalk/pt-stalk.t @@ -466,9 +466,56 @@ SKIP: { ); } +# ########################################################################### +# Test report about performance schema prepared_statements_instances in MySQL 5.7+ +# ########################################################################### + +cleanup(); + +SKIP: { + + skip "Only test on mysql 5.7" if ( $sandbox_version lt '5.7' ); + + sub start_thread { + # this must run in a thread because we need to have an active session + # with prepared statements + my ($dsn_opts) = @_; + my $dp = new DSNParser(opts=>$dsn_opts); + my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp); + my $dbh = $sb->get_dbh_for('master'); + $sb->load_file('master', "t/pt-stalk/samples/issue-1642750.sql"); + } + my $thr = threads->create('start_thread', $dsn_opts); + $thr->detach(); + threads->yield(); + + my $cmd = "$trunk/bin/pt-stalk --no-stalk --iterations=1 --host=127.0.0.1 --port=12345 --user=msandbox " + . "--password=msandbox --sleep 0 --run-time=10 --dest $dest --log $log_file --pid $pid_file " + . "--defaults-file=$cnf >$log_file 2>&1"; + + system($cmd); + sleep 15; + PerconaTest::kill_program(pid_file => $pid_file); + + $output = `cat $dest/*-prepared-statements 2>/dev/null`; + like( + $output, + qr/ STATEMENT_NAME: rand_statement/, + "MySQL 5.7 PREPARE rand_statement" + ); + + like( + $output, + qr/ STATEMENT_NAME: abs_statement/, + "MySQL 5.7 PREPARE abs_statement" + ); +} + # ############################################################################# # Done. # ############################################################################# + + cleanup(); diag(`rm -rf $dest 2>/dev/null`); ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); From 6a960b6bfb8483206fe92e392ea6d037ec80463d Mon Sep 17 00:00:00 2001 From: guriandoro Date: Wed, 22 Mar 2017 11:37:41 -0400 Subject: [PATCH 4/6] PT-90 Adding file needed for tests --- t/pt-stalk/samples/issue-1642750.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 t/pt-stalk/samples/issue-1642750.sql diff --git a/t/pt-stalk/samples/issue-1642750.sql b/t/pt-stalk/samples/issue-1642750.sql new file mode 100644 index 00000000..2ea2c15e --- /dev/null +++ b/t/pt-stalk/samples/issue-1642750.sql @@ -0,0 +1,11 @@ +/* Prepare two statements*/ + +SET @random_statement_prepare = 'SELECT RAND() AS rand'; +PREPARE rand_statement FROM @random_statement_prepare; + +SET @absolute_value_statement_prepare = 'SELECT ABS(?) AS abs_A'; +PREPARE abs_statement FROM @absolute_value_statement_prepare; + +/* Wait to let pt-stalk to collect the data and find these prepare statements */ +SELECT SLEEP(11); + From bbe373cd22bda01ac24aaa1fe11d6240e6338058 Mon Sep 17 00:00:00 2001 From: guriandoro Date: Wed, 22 Mar 2017 11:51:36 -0400 Subject: [PATCH 5/6] PT-90 Fixed function name and typos in test result string --- t/pt-stalk/pt-stalk.t | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/t/pt-stalk/pt-stalk.t b/t/pt-stalk/pt-stalk.t index 9d9ac2c5..31287c2d 100644 --- a/t/pt-stalk/pt-stalk.t +++ b/t/pt-stalk/pt-stalk.t @@ -476,7 +476,7 @@ SKIP: { skip "Only test on mysql 5.7" if ( $sandbox_version lt '5.7' ); - sub start_thread { + sub start_thread_1642750 { # this must run in a thread because we need to have an active session # with prepared statements my ($dsn_opts) = @_; @@ -485,7 +485,7 @@ SKIP: { my $dbh = $sb->get_dbh_for('master'); $sb->load_file('master', "t/pt-stalk/samples/issue-1642750.sql"); } - my $thr = threads->create('start_thread', $dsn_opts); + my $thr = threads->create('start_thread_1642750', $dsn_opts); $thr->detach(); threads->yield(); @@ -501,13 +501,13 @@ SKIP: { like( $output, qr/ STATEMENT_NAME: rand_statement/, - "MySQL 5.7 PREPARE rand_statement" + "MySQL 5.7 prepared statement: rand_statement" ); like( $output, qr/ STATEMENT_NAME: abs_statement/, - "MySQL 5.7 PREPARE abs_statement" + "MySQL 5.7 prepared statement: abs_statement" ); } From 6bca01e8fb8543c9c99e4f136011718dc675a0ad Mon Sep 17 00:00:00 2001 From: guriandoro Date: Sat, 10 Jun 2017 11:58:23 -0400 Subject: [PATCH 6/6] PT-90 Ran util/update-modules after merge from 3.0 And proceeded to test with `prove -v t/pt-stalk/`. All tests OK. --- bin/pt-stalk | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bin/pt-stalk b/bin/pt-stalk index 1a5643ce..2bc7b94b 100755 --- a/bin/pt-stalk +++ b/bin/pt-stalk @@ -958,6 +958,10 @@ collect() { ps_locks_transactions "$d/$p-ps-locks-transactions" fi + if [ "${mysql_version}" '>' "5.6" ]; then + (echo $ts; ps_prepared_statements) >> "$d/$p-prepared-statements" & + fi + slave_status "$d/$p-slave-status" "${mysql_version}" curr_time=$(date +'%s') @@ -1124,6 +1128,13 @@ ps_locks_transactions() { } +ps_prepared_statements() { + $CMD_MYSQL $EXT_ARGV -e "SELECT t.processlist_id, pse.* \ + FROM performance_schema.prepared_statements_instances pse \ + JOIN performance_schema.threads t \ + ON (pse.OWNER_THREAD_ID=t.thread_id)\G" +} + slave_status() { local outfile=$1 local mysql_version=$2