在MySQL服务器上查找最繁忙的数据库和表

我有一个繁忙的MyMQL服务器与不less数据库。 我试图找出find服务器上最繁忙的数据库(和表)的最佳方法,以便我可以将它们迁移到单独的机器上。 最好的办法是什么呢?

您应该激活慢查询日志,看看哪些查询花费最多的时间。 这可以通过使用来实现

log_slow_queries = /var/log/foo.log long_query_time = 5 

根据需要调整long_query_time。

第二个select是使用mytop,并在查询过程中查看。 但我build议去日志慢查询路线。 如果你想请求/秒指标,你应该启用二进制日志文件一段时间(比如说一天),然后运行一些像http://hackmysql.com/mysqlsla就可以了。

使用Maatkit工具集。 特别是mk-query-digest 。 使用通用日志或tcpdump创build所有查询的日志。 mk-query-digest会创build一个最频繁查询的报告。 从这个报告中你可以看到哪个数据库/表最经常被击中。

捕获查询包

 tcpdump -i eth1 port 3306 -s 65535 -x -n -q -tttt > dump.txt 

与…分析

 mk-query-digest --type=tcpdump dump.txt --order-by=Query_time:cnt --limit=200 > query_report.txt 

如果您有额外的资金需要花费,请使用MySQL Enterprise Monitor来评估各种性能和查询统计信息。 我认为有可能以某种方式获得MEM的评估版本。

如果你没有额外的现金, MySQL Proxy可以拦截查询并执行任何你想要的,所以你可以收集统计数据。

Peter Meyer告诉你的慢查询日志也是一种方法。

我会build议谷歌最初开发的所谓的user_statisticsfunction。 它可以在Percona Server和MariaDB中使用,在即将到来的MySQL 5.6版本的PERFORMANCE_SCHEMA中也有类似的function。 所有这些都使得确定使用哪些表格,索引等变得相当微不足道。

如果这不是一个选项,那么我会select由sreimerbuild议的pt-query-digest。