MySQL 内存基本信息

MySQL 内存基本信息

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

答案1

MySQL 内存基本信息

假设您主要使用 InnoDB 表,您可以看到 MySQL 中使用了多少内存:

SHOW ENGINE INNODB STATUS

它会向您显示很多信息,但您正在寻找类似这样的信息: 在此处输入图片描述

上述数据库中几乎没有任何活动。

每个连接的最大内存

如果您想知道连接可能使用的最大量,可以使用以下查询:

SELECT ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@tmp_table_size
+ 2*@@net_buffer_length
) / (1024 * 1024) AS MEMORY_PER_CON_MB;

可以使用以下方法找到最大连接数:

select @@max_connections;

每个查询的平均内存

如果您想要每个查询的平均值,那就有点难了。您可以从 INNODB 状态中获取信息,然后将其除以连接数。一般来说,我假设每个连接平均需要大约一半的可用内存。多年来,这是一个相当安全的选择。YMMV。

答案2

每个连接消耗的内存量是可变的,具体取决于您正在运行的查询、结果集的大小以及月相。您需要测量当前的内存使用情况,并(假设这里有很多)根据连接的当前平均内存使用情况推断出您可以获得多少个连接。

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

答案3

我用来理解/配置 mysql 如何使用内存的另一个好工具是mysql报告

答案4

您可以从配置变量中轻松确定每个服务器连接的最大内存成本。

获取您的实际的不幸的是,由于线程的方式,每个连接的内存使用量变得更加困难mysqld

相关内容