管道进程5(迭代)导致错误:sprintf中的冗余参数位于/ usr/bin/pt-query-digest行2556

Sag*_*uri 7 toolkit mariadb percona ubuntu-16.04

我使用percona-toolkit来分析mysql-slow-query(logs).所以命令非常基本:

pt-query-digest slowquery.log

现在结果(错误)是:

18.2s用户时间,100ms系统时间,35.61M rss,105.19M vsz

当前日期:2016年7月7日星期四17:18:43

主机名:Jammer

文件:slowquery.log

管道进程5(迭代)导致错误:sprintf中的冗余参数位于/ usr/bin/pt-query-digest行2556.将重试管道进程4(迭代)2次.

.. ..(相同的结果打印两次)..

管道导致错误:管道进程5(迭代)导致错误:sprintf中的冗余参数位于/ usr/bin/pt-query-digest第2556行.由于进程4(迭代)导致过多错误,因此终止管道.

现在有关环境的细节,我使用的是Ubuntu 16.04,MariaDB 10.1.14,Percona-Toolkit 2.2.16

我在这里发现了bug报告,但它就像一个解决方法,并没有真正解决错误.即使在应用补丁之后,命令结果看起来也不够令人满意.


我在ubuntu 16.04 MySql上面临同样的问题.我的慢查询日志的内容如下.

/ usr/sbin/mysqld,版本:5.7.16-0ubuntu0.16.04.1-log((Ubuntu)).开始于:Tcp端口:3306 Unix套接字:/var/run/mysqld/mysqld.sock时间Id命令参数/ usr/sbin/mysqld,版本:5.7.16-0ubuntu0.16.04.1-log((Ubuntu)).开始于:Tcp端口:3306 Unix套接字:/var/run/mysqld/mysqld.sock时间Id命令参数时间:2016-12-08T05:13:55.140764Z User @ Host:root [root] @ localhost [] Id: 20 Query_time:0.003770 Lock_time:0.000200 Rows_sent:1 Rows_examined:2 SET timestamp = 1481174035; SELECT COUNT(*)FROM INFORMATION_SCHEMA.TRIGGERS;

错误是一样的:

管道导致错误:管道进程5(迭代)导致错误:sprintf中的冗余参数位于/ usr/bin/pt-query-digest第2556行.

Ubuntu 16.04 MySql Ver 14.14 Distrib 5.7.16 pt-query-digest 2.2.16

ele*_*nst 7

该错误似乎在当前版本的工具包(2.2.20)中得到修复,显然在之前版本中从2.2.17开始修复.

这个补丁似乎可以解决这个特定的地方pt-query-digest:

--- percona-toolkit-2.2.16/bin/pt-query-digest  2015-11-06 14:56:23.000000000 -0500
+++ percona-toolkit-2.2.20/bin/pt-query-digest  2016-12-06 17:01:51.000000000 -0500
@@ -2555,8 +2583,8 @@
    }
    return sprintf(
       $num =~ m/\./ || $n
-         ? "%.${p}f%s"
-         : '%d',
+         ? '%1$.'.$p.'f%2$s'
+         : '%1$d',
       $num, $units[$n]);
 }
Run Code Online (Sandbox Code Playgroud)

但正如最初的问题和错误报告中提到的,相当多的工具/功能受到影响,完整的错误修复包括许多小的变化:https: //github.com/percona/percona-toolkit/pull/73/files