我有一个繁忙的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。