如何找出每个mysql连接的内存开销?

我想找出每个mysql进程的内存开销。 现在,我有800多个MySQL连接,但我不知道系统何时开始交换。 我使用FreeBSD。

每个连接所消耗的内存量是可变的,具体取决于您正在运行的查询,结果集的大小以及月亮的相位。 你会想测量当前的内存使用情况,并且(假设这里有一堆)通过连接的当前平均内存使用量来推断出你可以得到多less连接。

这种方法的问题是内存可能不是你的限制因素 – 查询争用,磁盘IO,或任何可以杀死你开始交换之前。

使用mysqltunner.pl来显示你的报告

-------- Performance Metrics ----------------------------------------------- [--] Total buffers: 168.0M global + 2.8M per thread (10 max threads) [OK] Maximum reached memory usage: 179.0M (18.04% of installed RAM) [OK] Maximum possible memory usage: 195.5M (19.70% of installed RAM) 

2.8M是我的每线程内存成本包括连接和195.5M是总成本

您可以很容易地从configurationvariables中确定每个连接到服务器的最大内存成本。

  • MySQL文档和MySQL性能博客有一些详细信息。
  • 一些有用的东西,比如MySQLTuner和mysql-memory-profile ,可以以即用的方式提供这些信息。

由于mysqld线程的方式,获得每个连接的实际内存使用情况是非常困难的。

另一个用于理解/configurationmysql如何使用内存的好工具是mysqlreport 。