我们的数据库在一些非常重要的用例中运行缓慢。我已经将其追溯到一些查询执行全文搜索和对大量记录(db 文件顺序读取)进行单行访问之后的问题。一旦数据在内存中,这些查询就会变得非常快。
我们开发人员现在的解决方案是将最热的表放入内存。
我们目前的 SGA_MAX 为 20 GB,SGA_TARGET 为 14 GB。ADDM 和 AWR 推荐 25GB 的 SGA 空间。
我们的基础架构团队现在将我们的数据库升级到 40GB,但是,数据库管理员说这么多的内存会影响 oracle 的性能。
真的吗?我无法想象多 20GB 的 RAM 会使数据库运行得更慢。
版本:Oracle 数据库 11g 企业版版本 11.2.0.3.0 - 64 位生产
是和否。如果配置不当,过多的 RAM 会导致性能下降。
例如在 Linux 平台上,如果没有配置 HugePages,具有大 SGA 和许多数据库会话,页表将持有大量内存。我们的客户有一次,数据库服务器安装了 512 GB 内存。他们有大约 4000-5000 个数据库会话和 150 GB 的 SGA,这导致了 360 GB 的页表大小——因此服务器内存不足,这导致挂起和重新启动。启用 HugePages 后,页表的大小减少到 1.5 GB(从 360 GB!!),节省并允许使用超过 350 GB 的额外内存。
客户使用 Solaris x86-64 11.1 的另一种情况与上述情况相反。该数据库使用 1 GB 页面和 300 GB SGA,但由于 Solaris 的错误,在操作系统级别处理大页面所花费的时间中有 99.8% 是开销,导致 CPU 在内核模式下运行,导致服务器负载巨大(300 + 32 核)。使用 24 GB SGA 时数据库运行良好,但无法处理使用 300 GB SGA 的负载。在 Solaris 中禁用大页面解决了这个问题(有一个 Solaris 补丁,但本地管理员没有安装它......)。
然而,这些不是 Oracle 限制,而是配置问题。Oracle 可以处理大量内存。我们的一位客户已经使用 500 GB+ SGA 很长时间没有任何问题,并且他们计划进一步增加它。