我有一个繁忙的 MyMQL 服务器,里面有相当多的数据库。我正在尝试找出找到服务器上最繁忙的数据库(和表)的最佳方法,以便我可以将它们迁移到单独的机器上。最好的方法是什么?
答案1
您应该激活慢查询日志并查看哪些查询耗时最多。这可以通过使用
log_slow_queries = /var/log/foo.log
long_query_time = 5
根据您的需要调整 long_query_time。
第二种选择是使用 mytop 并查看查询的运行情况。但我建议采用日志慢查询路线。如果您想要请求/秒指标,您应该启用二进制日志文件一段时间(比如一天),然后运行类似http://hackmysql.com/mysqlsla在上面。
答案2
使用 Maatkit 工具集。具体来说mk-查询-摘要. 使用通用日志或 tcpdump 创建所有查询的日志。mk-query-digest 将创建最频繁查询的报告。从该报告中,您可以看到哪些数据库/表被访问得最频繁。
使用以下方式捕获查询数据包
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
答案3
如果您有多余的钱,可以用它MySQL Enterprise Monitor
来评估各种性能和查询统计数据。我认为可以通过某种方式获得 MEM 的评估版本。
如果您没有多余的现金,MySQL Proxy
可以拦截查询并执行任何您想要的操作,这样您就可以通过这种方式收集统计数据。
Peter Meyer 告诉你的慢查询日志也是一种方法。
答案4
我建议使用 Google 最初开发的所谓 user_statistics 功能。Percona Server 和 MariaDB 中提供了此功能,即将发布的 MySQL 5.6 版本中的 PERFORMANCE_SCHEMA 中也有类似功能。所有这些功能都使确定使用了哪些表、索引等变得相当简单。
如果这不是一个选项,那么我会选择 sreimer 建议的 pt-query-digest。