Oracle 官方文档说,对于 RAM 超过 16GiB 的机器,我们需要分配 16GiB 的交换空间。
我们的服务器是 RHEL 7,拥有 256GiB 的 RAM。
DBA 不想看到系统交换,因此他们希望我们非常积极地监控 16GiB 的交换。
我建议我们将 RAM 翻倍至 512GiB(费用已批准),并禁用交换。然而,这违背了 Oracle 建议的 16GiB 交换空间,即使我们将 RAM 翻倍。
老实说,我不明白拥有 3% 的交换空间有什么意义,或者为什么如果我添加的 RAM 比交换空间多,我们必须保留交换空间。
那么,有什么好的论据可以用来证明在没有交换的情况下运行 Oracle 是合理的吗?
PS我提到RAM翻倍的唯一原因是为了证明我很难争论的论点的荒谬性。我真正要寻找的是证明禁用交换是合理的论据。
禁用交换是一个好主意,如果
这种事情经常发生在数据库中。我在 noSQL 数据库中看到的更多,但关系数据库也可能面临同样的挑战。
操作系统中没有任何东西需要交换。Linux 通过杀死最后一个请求内存的进程来非常优雅地处理这个问题。您不想达到这一点,因此请确保将 Oracle 调整为仅使用约 90% 的内存,以便为系统守护程序留出一些余量并留有容错余地。“空闲”内存还用于缓冲磁盘 I/O,这是一个巨大的性能优势,因此尝试让数据库本身消耗更多内存最终会降低整体系统性能,从而适得其反。
如果应用程序是数据库或缓存或类似系统,即使系统的内存只有问题的一小部分,我也会默认在这一点上不进行交换。
当局
所以你不只是依靠我的话:
卡桑德拉
Datastax为 Cassandra 解释:
里亚克
Basho为 Riak 解释说,您应该:
mysql
Percona坐在围栏上,为问题的双方提供了有用的警告。 MariaDB不同意禁用交换:
服务器故障
这里广受好评的答案包括:
这个答案今天有 22 个赞成票,并且已经 4 岁了。您还可以在那里看到其他一些赞美交换价值的答案,但没有迹象表明它们正在运行数据库。他们也没有那么多的赞成票。
:)
乌贼
虽然他们不公开建议禁用交换鱿鱼家伙说:
这就是您不希望数据库发生的事情。
雷迪斯
虽然 redis官方建议交换用户,但不要购买它:
Hadoop
正如在 hortonworks 社区投票最多的答案中所见:
我喜欢这个,因为它谈论的是一个 Java 应用程序,但它得出了很多与上面提到的关于数据库相同的结论。此外,它还提到了对调优高性能应用程序非常有帮助的监控。如果您没有数字可以比较,那么一切都是基于难以比较的感觉。为每个可衡量的指标制作图表 - 应用程序级延迟和吞吐量,直至 CPU、磁盘、内存和网络图表。这些提供了您必须做出决策的大量真实数据。
Linux 上的 Alex 对此主题有一篇有趣的读物:“交换与不交换” http://www.alexonlinux.com/swap-vs-no-swap
底线是,没有交换:
为什么不为未使用的页面保留合理的交换量,并修改 vfs 缓存压力以将交换性修改为仅在 OOM 条件的情况下进行交换。您还可以将 oracle 进程固定到主内存,以确保它们不会接触磁盘。这满足了数据库不会受到慢速 IO 系统的影响,并且还允许您从主内存中释放垃圾以供数据库、缓冲区和缓存使用。这是两全其美的。
这个话题经常出现。Swap 只是 RAM 的扩展,所以让我们购买更多的 RAM,对吗?错误的。具有 16 GiB 交换和 512 GiB RAM 的设置具有完美的经济意义。让我解释。
如果您熟悉主要软件,您就会非常准确地知道它需要多少“愚蠢”的内存。什么“愚蠢”的记忆?最初显示在 RAM 中的各种代码和数据,但将永远不再需要。也就是说,用户看到的性能永远不会受到影响,因为这些东西在内存中不容易获得。
除了修复软件,你可以给它交换数量,但不能超过这个数量。是的,让它使用 100% 的交换。这才是重点。不要增加交换,否则您可能会冒一些关键的东西意外地在那里结束的风险。记录下来,这样人们就不会因为看到 100% 的交换使用而惊慌失措。在 Oracle 的情况下,这个数量是 16 GiB,我可以根据我的经验说它会被使用,即使在 700 GiB 的盒子上,你也不会体验到 swpin 影响性能。
实际上,您可以获得 16 GiB 的 RAM 来完成实际工作并让您的用户受益。截至 2017 年,它将您的组织的成本降低了约 50 美元。如果您的服务器有 256 GiB RAM,您可以配置交换并节省 50 美元。如果您的服务器有 10 TiB RAM,您可以配置交换并节省... 50 美元。看?还是一样。
目前,零交换总是安全的。只需花费您 50 美元,仅此而已。
如果您的组织无法处理 100% 使用的交换(例如单独的监控团队等),请不要这样做。如果你让任何人思考这个问题,你已经浪费了他们 50 美元的时间。
一些供应商确实拥有零浪费的内存。并且一些供应商没有足够的信心来估计“愚蠢”分配的数量,所以他们说“零交换”以避免未知问题只是为了节省一大笔钱。那也没关系!我只是相信供应商,他们支持安装,他们知道他们的东西。