AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 817010
Accepted
chutz
chutz
Asked: 2016-11-26 01:01:01 +0800 CST2016-11-26 01:01:01 +0800 CST 2016-11-26 01:01:01 +0800 CST

我可以在没有交换的情况下运行 Oracle 服务器吗?

  • 772

Oracle 官方文档说,对于 RAM 超过 16GiB 的机器,我们需要分配 16GiB 的交换空间。

我们的服务器是 RHEL 7,拥有 256GiB 的 RAM。

DBA 不想看到系统交换,因此他们希望我们非常积极地监控 16GiB 的交换。

我建议我们将 RAM 翻倍至 512GiB(费用已批准),并禁用交换。然而,这违背了 Oracle 建议的 16GiB 交换空间,即使我们将 RAM 翻倍。

老实说,我不明白拥有 3% 的交换空间有什么意义,或者为什么如果我添加的 RAM 比交换空间多,我们必须保留交换空间。

那么,有什么好的论据可以用来证明在没有交换的情况下运行 Oracle 是合理的吗?

PS我提到RAM翻倍的唯一原因是为了证明我很难争论的论点的荒谬性。我真正要寻找的是证明禁用交换是合理的论据。

linux oracle-11g swap oracle-linux
  • 4 4 个回答
  • 4244 Views

4 个回答

  • Voted
  1. Best Answer
    chicks
    2016-11-26T07:34:29+08:002016-11-26T07:34:29+08:00

    禁用交换是一个好主意,如果

    • 您的软件可以优雅地处理内存不足的情况或限制自身以避免 OOM 情况
    • 具有一致的性能至关重要(当您的系统正在交换延迟时,延迟会增加,这可能会严重到使其对许多应用程序有效无用)

    这种事情经常发生在数据库中。我在 noSQL 数据库中看到的更多,但关系数据库也可能面临同样的挑战。

    操作系统中没有任何东西需要交换。Linux 通过杀死最后一个请求内存的进程来非常优雅地处理这个问题。您不想达到这一点,因此请确保将 Oracle 调整为仅使用约 90% 的内存,以便为系统守护程序留出一些余量并留有容错余地。“空闲”内存还用于缓冲磁盘 I/O,这是一个巨大的性能优势,因此尝试让数据库本身消耗更多内存最终会降低整体系统性能,从而适得其反。

    如果应用程序是数据库或缓存或类似系统,即使系统的内存只有问题的一小部分,我也会默认在这一点上不进行交换。

    当局

    所以你不只是依靠我的话:

    卡桑德拉

    Datastax为 Cassandra 解释:

    您必须完全禁用交换。不这样做会严重降低性能。因为 Cassandra 有多个副本和透明的故障转移,所以最好在内存不足时立即杀死一个副本,而不是进入交换。这允许流量立即重定向到正常运行的副本,而不是继续访问由于交换而具有高延迟的副本。如果您的系统有大量 DRAM,交换仍然会显着降低性能,因为操作系统会交换可执行代码,以便更多 DRAM 可用于缓存磁盘。

    里亚克

    Basho为 Riak 解释说,您应该:

    理想情况下,您应该禁用交换以确保不交换 Riak 的进程页面。禁用交换将允许 Riak 在内存不足的情况下崩溃。erl_crash.dump这将在目录中留下一个名为 的故障转储文件,该/var/log/riak文件可用于确定内存使用的原因。

    mysql

    Percona坐在围栏上,为问题的双方提供了有用的警告。 MariaDB不同意禁用交换:

    虽然有些完全禁用交换,并且您当然希望避免任何数据库进程使用它,但保留一些交换空间以至少允许内核在出现峰值时优雅地崩溃是明智的。提供紧急交换至少可以让您在一定范围内杀死任何失控的进程。

    服务器故障

    这里广受好评的答案包括:

    我个人发现交换系统比崩溃的系统更糟糕。崩溃的系统会触发备用备份服务器更快地接管。在主动-主动(或负载平衡设置)中,崩溃的系统将更快地退出旋转。无交换系统再次获胜。

    这个答案今天有 22 个赞成票,并且已经 4 岁了。您还可以在那里看到其他一些赞美交换价值的答案,但没有迹象表明它们正在运行数据库。他们也没有那么多的赞成票。:)

    乌贼

    虽然他们不公开建议禁用交换鱿鱼家伙说:

    鱿鱼往往有点记忆力强。它将内存用于许多不同的事情,其中​​一些比其他更容易控制。内存使用很重要,因为如果 Squid 进程大小超过系统的 RAM 容量,则必须将一些进程块临时交换到磁盘。如果您在同一系统上运行其他需要大量内存的应用程序,也可能发生交换。交换会导致 Squid 的性能迅速下降。

    这就是您不希望数据库发生的事情。

    雷迪斯

    虽然 redis官方建议交换用户,但不要购买它:

    首先禁用交换 - Redis 和交换不容易混合,这肯定会导致缓慢。

    Hadoop

    正如在 hortonworks 社区投票最多的答案中所见:

    对于只有分布式服务的从属/工作/数据主机,您可能会禁用交换。对于分布式服务,最好让进程/主机被杀死而不是交换。杀死该进程或主机不应影响集群可用性。换一种说法:你想“快速失败”而不是“慢慢退化”。

    [……]

    对于master,交换也经常被禁用,尽管这不是 Hortonworks 的固定规则,我认为会有一些讨论/分歧。可以像对待其他非 Hadoop 环境中的 master 一样对待 master。

    禁用 master 上的交换的担心是 OOM(内存不足)事件可能会影响集群可用性。但是即使配置了交换,这仍然会发生,只是需要稍长一些。良好的管理员/操作员做法是监控 RAM 可用性,然后在内存不足之前解决任何问题。从而在不影响性能的情况下保持可用性。那时不需要交换。

    我喜欢这个,因为它谈论的是一个 Java 应用程序,但它得出了很多与上面提到的关于数据库相同的结论。此外,它还提到了对调优高性能应用程序非常有帮助的监控。如果您没有数字可以比较,那么一切都是基于难以比较的感觉。为每个可衡量的指标制作图表 - 应用程序级延迟和吞吐量,直至 CPU、磁盘、内存和网络图表。这些提供了您必须做出决策的大量真实数据。

    • 8
  2. bvdli
    2017-01-04T01:19:23+08:002017-01-04T01:19:23+08:00

    Linux 上的 Alex 对此主题有一篇有趣的读物:“交换与不交换” http://www.alexonlinux.com/swap-vs-no-swap

    底线是,没有交换:

    • 您的系统将不太稳定。
    • 与具有交换分区的系统相比,您系统中的磁盘访问速度会慢一些。此外,磁盘访问速度会随着时间的推移而下降。
    • 0
  3. Michael Rutledge
    2018-09-21T21:56:42+08:002018-09-21T21:56:42+08:00

    为什么不为未使用的页面保留合理的交换量,并修改 vfs 缓存压力以将交换性修改为仅在 OOM 条件的情况下进行交换。您还可以将 oracle 进程固定到主内存,以确保它们不会接触磁盘。这满足了数据库不会受到慢速 IO 系统的影响,并且还允许您从主内存中释放垃圾以供数据库、缓冲区和缓存使用。这是两全其美的。

    • 0
  4. kubanczyk
    2017-01-04T10:03:03+08:002017-01-04T10:03:03+08:00

    这个话题经常出现。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 美元的时间。

    一些供应商确实拥有零浪费的内存。并且一些供应商没有足够的信心来估计“愚蠢”分配的数量,所以他们说“零交换”以避免未知问题只是为了节省一大笔钱。那也没关系!我只是相信供应商,他们支持安装,他们知道他们的东西。

    • -1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve