From 377b50144bb50050459e93f1896f57689251dc36 Mon Sep 17 00:00:00 2001 From: frank-cizmich Date: Thu, 11 Feb 2016 17:44:20 -0300 Subject: [PATCH] new var binlog_error_action caused bug in collect module --- bin/pt-stalk | 4 +--- lib/bash/collect.sh | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/bin/pt-stalk b/bin/pt-stalk index 1442263e..11105198 100755 --- a/bin/pt-stalk +++ b/bin/pt-stalk @@ -816,7 +816,7 @@ collect() { local mysql_version="$(awk '/^version[^_]/{print substr($2,1,3)}' "$d/$p-variables")" - local mysql_error_log="$(awk '/log_error/{print $2}' "$d/$p-variables")" + local mysql_error_log="$(awk '/^log_error/{print $2}' "$d/$p-variables")" if [ -z "$mysql_error_log" -a "$mysqld_pid" ]; then mysql_error_log="$(ls -l /proc/$mysqld_pid/fd | awk '/ 2 ->/{print $NF}')" fi @@ -871,7 +871,6 @@ collect() { $CMD_SYSCTL -a >> "$d/$p-sysctl" & fi - # collect dmesg events from 60 seconds ago until present if [ "$CMD_DMESG" ]; then local UPTIME=`cat /proc/uptime | awk '{ print $1 }'` local START_TIME=$(echo "$UPTIME 60" | awk '{print ($1 - $2)}') @@ -892,7 +891,6 @@ collect() { $CMD_MPSTAT -P ALL $OPT_RUN_TIME 1 >> "$d/$p-mpstat-overall" & fi - $CMD_MYSQLADMIN $EXT_ARGV ext -i$OPT_SLEEP_COLLECT -c$cnt >>"$d/$p-mysqladmin" & local mysqladmin_pid=$! diff --git a/lib/bash/collect.sh b/lib/bash/collect.sh index 91289931..25f4f301 100644 --- a/lib/bash/collect.sh +++ b/lib/bash/collect.sh @@ -83,7 +83,7 @@ collect() { local mysql_version="$(awk '/^version[^_]/{print substr($2,1,3)}' "$d/$p-variables")" # Is MySQL logging its errors to a file? If so, tail that file. - local mysql_error_log="$(awk '/log_error/{print $2}' "$d/$p-variables")" + local mysql_error_log="$(awk '/^log_error/{print $2}' "$d/$p-variables")" if [ -z "$mysql_error_log" -a "$mysqld_pid" ]; then # Try getting it from the open filehandle... mysql_error_log="$(ls -l /proc/$mysqld_pid/fd | awk '/ 2 ->/{print $NF}')" @@ -110,6 +110,7 @@ collect() { local mutex="SHOW MUTEX STATUS" fi innodb_status 1 + tokudb_status 1 $CMD_MYSQL $EXT_ARGV -e "$mutex" >> "$d/$p-mutex-status1" & open_tables >> "$d/$p-opentables1" & @@ -133,7 +134,7 @@ collect() { fi elif [ "$CMD_STRACE" -a "$OPT_COLLECT_STRACE" -a "$mysqld_pid" ]; then # Don't run oprofile and strace at the same time. - $CMD_STRACE -T -s 0 -f -p $mysqld_pid > "${DEST}/$d-strace" & + $CMD_STRACE -T -s 0 -f -p $mysqld_pid -o "$d/$p-strace" & local strace_pid=$! fi @@ -283,6 +284,7 @@ collect() { fi innodb_status 2 + tokudb_status 2 $CMD_MYSQL $EXT_ARGV -e "$mutex" >> "$d/$p-mutex-status2" & open_tables >> "$d/$p-opentables2" & @@ -304,7 +306,7 @@ collect() { for file in "$d/$p-"*; do # If there's not at least 1 line that's not a TS, # then the file is empty. - if [ -z "$(grep -v '^TS ' --max-count 1 "$file")" ]; then + if [ -z "$(grep -v '^TS ' --max-count 10 "$file")" ]; then log "Removing empty file $file"; rm "$file" fi @@ -321,7 +323,7 @@ open_tables() { } lock_waits() { - local sql1="SELECT + local sql1="SELECT SQL_NO_CACHE CONCAT('thread ', b.trx_mysql_thread_id, ' from ', p.host) AS who_blocks, IF(p.command = \"Sleep\", p.time, 0) AS idle_in_trx, MAX(TIMESTAMPDIFF(SECOND, r.trx_wait_started, CURRENT_TIMESTAMP)) AS max_wait_time, @@ -333,7 +335,7 @@ lock_waits() { GROUP BY who_blocks ORDER BY num_waiters DESC\G" $CMD_MYSQL $EXT_ARGV -e "$sql1" - local sql2="SELECT + local sql2="SELECT SQL_NO_CACHE r.trx_id AS waiting_trx_id, r.trx_mysql_thread_id AS waiting_thread, TIMESTAMPDIFF(SECOND, r.trx_wait_started, CURRENT_TIMESTAMP) AS wait_time, @@ -354,9 +356,16 @@ lock_waits() { } transactions() { - $CMD_MYSQL $EXT_ARGV -e "SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G" - $CMD_MYSQL $EXT_ARGV -e "SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS\G" - $CMD_MYSQL $EXT_ARGV -e "SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS\G" + $CMD_MYSQL $EXT_ARGV -e "SELECT SQL_NO_CACHE * FROM INFORMATION_SCHEMA.INNODB_TRX\G" + $CMD_MYSQL $EXT_ARGV -e "SELECT SQL_NO_CACHE * FROM INFORMATION_SCHEMA.INNODB_LOCKS\G" + $CMD_MYSQL $EXT_ARGV -e "SELECT SQL_NO_CACHE * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS\G" +} + +tokudb_status() { + local n=$1 + + $CMD_MYSQL $EXT_ARGV -e "SHOW ENGINE TOKUDB STATUS\G" \ + >> "$d/$p-tokudbstatus$n" || rm -f "$d/$p-tokudbstatus$n" } innodb_status() {