一个进程(MySQL)在32位操作系统上可以消耗的最大内存是多less?

我有一个32位的RHEL盒子上运行的MySQL。 服务器本身具有4GB的总内存,2GB分配给MySQL。

我想知道我可以放在框中的最大内存量以及我可以分配给MySQL的多less内存。

我已经听说2GB和4GB是32位操作系统上的每个进程限制。

最终,我想知道是否可以在不升级到64位操作系统的情况下增加MySQL的内存。

这取决于你的内核和configuration。 通常是2Gb或3Gb。

应用程序本身可能会有一个自我设定的下限。 一些32bti应用程序/服务将不会使用超过2G,即使操作系统允许他们使用,因为他们自己的内部存储器pipe理使用(或允许)签名的32位整数。

如果您的CPU,内存控制器,操作系统和应用程序都支持PAE,那么这将允许单个进程使用更多的RAM。 PAE由Linux内核支持,并且无疑在RHEL存储库中预先创build了内核,并且已启用它(在大多数默认内核中都没有启用它,因为会影响性能) – 我不知道MySQL是否有支持虽然。

如果您使用的是较旧的内核,则可能需要查看内存映像configuration – 而大多数新内核默认为每个进程内核与用户态映射地址空间之间的1G / 3G拆分,在较旧的时间(RAM接近32位地址空间的限制实际上是闻所未闻的)2G / 2G分割是默认的,但是如果您需要1G / 3G则可以改变。

如果不深入研究这个问题,我的猜测是(除非你使用的是更老的内核,这是2G的限制,而不是3G的限制),如果不升级到64位,MySQL将不会使用2G以上的内存编译。 额外的RAM不太可能被浪费 – 内核将把它用于caching/缓冲区,所以尽pipeMySQL直接使用它会更有效率(因为MySQL的caching和操作系统caching都会有很多情况,的数据),它不会闲置,所以可以看到一些好处。

大多数现代发行版和处理器都支持PAE,这是Intel的指令集,允许内存寻址超出32位的限制。 PAE允许处理器访问最大64GB的RAM。 PAE有额外的CPU开销。

即使使用PAE,32位Linux也具有3GB的每进程限制。 通常,内核保留大约1GB。

MySQL是一个单进程守护进程。 因此,即使使用PAE,也无法解决32位以外的限制。

一些有用的参考:

  • PAE Wiki
  • LinuxRamLimits
  • MySQL内存分配

我认为每个进程可以看到(地址)4 GB,但是2 GB是内核空间,不能被应用程序数据填充。

假设MySQL可能会使用最多2 GB的内存总量(物理内存和交换空间)的MySQL实例GB数量。