Pipeline process 5 (iteration) caused an error: Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556

Pipeline process 5 (iteration) caused an error: Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556

我正在使用 percona-toolkit 分析 mysql-slow-query(日志)。所以命令非常基本:

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-report 找到了一些东西,但这就像一种解决方法,并没有真正解决错误。即使在应用补丁后,命令结果看起来也不够令人满意。


我在 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 设置时间戳=1481174035; SELECT 计数 (*) 来自 INFORMATION_SCHEMA.TRIGGERS;

错误相同:

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

Ubuntu 16.04 MySql 版本 14.14 分发 5.7.16 pt-query-digest 2.2.16

该错误似乎已在当前版本的工具包 (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]);
 }

但正如原始问题和错误报告中所述,相当多的 tools/functions 受到影响,完整的错误修复包括许多小的更改: https://github.com/percona/percona-toolkit/pull/73/files

我可能要迟到了。我想分享我是如何克服同样的错误的,因为它可能会帮助正在寻找答案的人。此时Percona工具包最新tag为3.0.9

我尝试 运行 pt-query-digest 在通过 apt 安装后,通过下载 deb 文件作为 Percona 文档提供的方法,但没有任何帮助。这是同样的错误。

Pipeline process 5 (iteration) caused an error: 
Redundant argument in sprintf at /usr/bin/pt-query-digest line (some line)

1 - 所以我deleted/removed安装percona-toolkit

2 - 首先,我 cleaned/updated perl 版本

sudo apt-get install perl

3 - 然后我从 repository's 自述文件中提到的源代码安装了 Percona 工具包。像这样。我用的是 branch 3.0.

git clone git@github.com:percona/percona-toolkit.git
cd percona-toolkit
perl Makefile.PL
make
make test
make install

就是这样。希望这对某人有所帮助。

我发现这个版本 percona-toolkit-3.0.12-1.el7 有错误。x86_64.rpm percona-toolkit-3.0.10-1.el7.x86_64.rpm 很好,percona-toolkit 对我很有用

at ./pt-query-digest line 9302.
Terminating pipeline because process 4 (iteration) caused too many errors.

请注意,您将看到错误消息: “sprintf 中的冗余参数”

如果您忘记在格式规范(第一个参数)前放置一个 %。