运行应用程序的SELECT查询,并生成有关每种查询模式如何在我们测试的不同MySQL版本的服务器上执行的报告。用于检测是否可以安全地升级或降级到某个版本。
pt-upgrade可以执行慢查询日志,通用日志,二进制日志,tcpdump,以及raw日志。
pt-upgrade h=host1 h=host2 slow.log
这里reference results是mysql server执行完成并保存到磁盘的结果,必须先用--save-results生成reference results。这可能会需要更多的磁盘空间,如果想在多个版本之间进行比较,这个方法比较适合。
pt-upgrade h=host1 --save-results host1_results/ slow.log pt-upgrade host1_results1/ h=host2
使用的要点:一致性环境和一致性数据对测试产生一个精确的报告很重要。不要在生产或活跃的mysql server上执行测试。建议测试的数据要一样。
缺省情况下,pt-upgrade只是执行select和set语句(不包括select...into)。如果还想比较insert、update、delete,可以使用参数--no-read-only。如果使用的是binlog,必须要指定--no-read-only,因为binlog不包含select语句。
只读比较:建议执行两次,第一次作为热身,第二次才作为比较结果
$ pt-upgrade h=Test1 h=Test2 --max-examples=1 <digest>.out 1> pt-upgrade_results.out 2> pt-upgrade_results.err
pt-upgrade会将结果输出到STDOUT,而内部warnings、errors和--progress会输出到STDERR,将二者分开,就可以如下输出设置:
pt-upgrade ... 1>report 2>err &
读写比较:
$ pt-upgrade h=Test1 h=Test2 --no-read-only --max-examples=1 <digest>.out 1> pt-upgrade_results_RW.out 2> pt-upgrade_results_RW.err
pt-upgrade本身不产生事务,但是日志中的事务会按照其原始的方式执行。但是pt-upgrade不是用来测试事务型任务的。
当pt-upgrade运行时,它会尽快打印有差异的查询。为了防止报告变得太长,查询不会单独报告,而是分组到类中。通过删除文字值、规范化空格等创建。因此,这些查询属于同一类:
SELECT c FROM t WHERE id = 1 SELECT c FROM t WHERE id=5 select c from t where id = 9
统一归类为:
select c from t where id=?
分析慢查询的工具
如果慢日志太大,可以取样分析,比如;
Note: When processing large slow logs, the tool may use some memory, so keep an eye on it if you're running it on production servers. pt-query-digest --sample 50 --no-report --output slowlog <slow_log_file> > <digest>.out
比较mysql设置的差异。
pt-config-diff h=<Testnode1> h=<Testnode2>