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

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

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

相关内容