64位还是32位Linux系统?

Mil*_*kov 3 linux 64-bit 32-bit slackware

我有一台具有 4GB RAM 的服务器。在上面,我安装了 32 位 Slackware Linux 12.1。当然,它并没有使用所有 4GB 的 RAM。我很快想将 RAM 增加到 8GB,并且正在寻找系统使用它的方法。该系统用作数据库服务器,白天负载很高。

AFAICT,我有两个选择:继续使用 32 位并重建内核并失去一些性能。或者使用 64 位并重新安装所有内容。查看 64 位版本的 Slackware,我可以运行 -current 或 Slamd64。

现在,进入问题:

  1. 我应该继续使用 32 位还是使用 64 位?

  2. 如果我去 64 位,我应该使用 -current 还是 Slamd64?

PS 我希望从在生产中实际使用这些配置中的任何一个的人那里得到答案,而不仅仅是复制/粘贴我可以通过谷歌找到的东西。

wzz*_*zrd 8

32 位系统上的每个进程内存为 4GB(默认情况下分为进程 3GB 和内核 1GB)。如果您希望您的数据库能够访问更多内存/每个进程/您别无选择,只能安装 64 位操作系统。如果每个进程 3GB 的限制不打扰您,您最好保持当前设置。顺便说一句,3GiB/1GiB 部门还有其他选项,但它们不会在您的特定情况下为您提供帮助。

对每个进程内存使用的进一步限制以所谓的“ZONE NORMAL”的形式存在,它永远不会超过 1GiB(准确地说是 896MiB)。当使用超过 1GiB (ZONE HIGHMEM) 的内存时,内核必须将该内存映射到 ZONE NORMAL 中,从而产生更多可能的瓶颈。ZONE HIGHMEM 在 64 位系统上不存在,在该系统上一切都是 ZONE NORMAL。这也是使用 64 位的一个很好的理由。

至于“在生产中”部分:我什至不知道您使用的是什么数据库。由于我上面提到的确切原因,我的 Oracle 设置几乎总是运行 64 位。不过我没有在生产中运行 Slackware,也不知道有谁在运行。

我的 0.02 欧元:选择 64 位。与可能的好处相比,重新安装是微不足道的。


Con*_*lls 6

大多数现代 32 位 CPU 都支持 PAE,这允许它们寻址超过 4GB 的物理内存,尽管单个进程一次只能看到 4GB。内核将占用一些地址空间。 这篇 Stackoverflow 帖子讨论了 PAE 的工作原理。

许多操作系统(包括 Linux 和 MS Windows)提供了一个 API,允许您在进程的虚拟地址空间内外操作 MMU 和页面覆盖。此工具允许您为磁盘缓冲区使用额外的内存。但是,据我所知,唯一直接支持此功能的 DBMS 平台是 MS SQL Server。

额外的内存将提高您的数据库读取性能(这可能会提高您的整体吞吐量),但写入性能将受到 I/O 的限制。如果您的 DB 缓存命中率较低(比如低于 95%),那么额外的内存可能会提高您的整体吞吐量。否则,您可能需要查看您的磁盘子系统(请参阅下面的 1)。

假设您需要或可以从更多内存中受益,最好的方法是迁移到 64 位平台。根据型号,现代至强或皓龙服务器最多可让您安装 32-144GB。这很可能是您的最佳选择。

  1. SAN 适用于事务性应用程序。对于大容量应用程序,您应该在数据库日志上进行直写缓存,但您可能能够在数据卷上使用回写缓存。这将为您提供良好的日志读取器性能,因为随机数据写入可以被控制器的电池备份缓存吸收,并且控制器可以优化磁盘写入以提高吞吐量。

    但是,这种安排具有可能导致数据量不一致(损坏)的故障模式。在日志卷上使用直写可以缓解这种情况(因为日志不易受到这些故障模式的影响)。实际上,这将您限制为还原/前滚恢复模型,因此只有当您可以容忍(例如)4 小时的恢复窗口时,它才会起作用。