管道流程5(迭代)出现错误:/ usr / bin / pt-query-digest线2556处的sprintf中有冗余参数。

8
我正在使用percona-toolkit来分析mysql-slow-query(日志)。所以命令很基本: pt-query-digest slowquery.log
现在的结果(错误)是:
18.2s用户时间,100ms系统时间,35.61M rss,105.19M vsz 当前日期:Thu Jul 7 17:18:43 2016 主机名:Jammer 文件:slowquery.log 管道进程5(迭代)引起错误:Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556. 将重试管道进程4(迭代)2次。
..(相同结果打印两次) ..
管道引起了一个错误:管道进程5(迭代)引起了一个错误:Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556。终止管道,因为进程4(迭代)引起了太多错误。
现在环境的具体情况,我使用Ubuntu 16.04,MariaDB 10.1.14,Percona-Toolkit 2.2.16。
我在这里找到了一个错误报告,但它像一种解决方法,并没有真正解决错误。即使应用了补丁,命令结果看起来也不令人满意。
我在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 用户@主机: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(迭代)引起了一个错误:Redundant argument in sprintf at /usr/bin/pt-query-digest line 2556。
Ubuntu 16.04 MySQL Ver 14.14 Distrib 5.7.16 pt-query-digest 2.2.16

你的表名(或其他)中是否有“%”? - Rick James
嘿@RickJames,没有类似的情况。你有机会查看上面的错误报告(链接)吗? - Sagar Suri
虽然我在查询中使用了它来忽略前缀和后缀匹配,但是。 - Sagar Suri
4个回答

8
这个问题似乎已在工具包的当前版本(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]);
 }

但是如原问题和bug报告所述,相当多的工具/函数受到了影响,完整的错误修复包括许多小的更改:https://github.com/percona/percona-toolkit/pull/73/files


1
我可能来晚了。我想分享一下我是如何克服这个错误的,希望能帮助到正在寻找答案的人。此时Percona toolkit的最新标签为3.0.9。
我尝试通过按照Percona文档提供的方法下载deb文件并通过apt安装后运行pt-query-digest,但都没有起作用。出现了同样的错误。
Pipeline process 5 (iteration) caused an error: 
Redundant argument in sprintf at /usr/bin/pt-query-digest line (some line)

1 - 所以我删除/移除了percona-toolkit的安装。

2 - 首先,我清理/更新了perl版本。

sudo apt-get install perl

3 - 然后我按照存储库的自述文件安装了Percona工具包。就像这样。我使用的是3.0分支。

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

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


0

我发现这个版本 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.

0
请注意,如果您忘记在格式说明符(第一个参数)前面放置%,则会看到错误消息:“sprintf中的冗余参数”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接