我使用 Red Hat Enterprise Linux Server 版本 5.11 (Tikanga) 作为操作系统,rdbms 是 11gR2 软件。我创建了一个内存目标 = 3 GB 和物理 RAM = 7 GB 的数据库。当我进行大量操作时,我的数据库服务变得很慢。我需要更改 SHMALL 和 SHMAX 参数来提高性能。你能建议我应该给多少值吗?
答案1
SHMAX
对于 64 位服务器,您可以使用的最佳值是 RAM 的一半
而 32 位服务器则为 3 GB
上海商城
您应该使 SHMALL 小于可用 RAM 以避免分页。
SHMAX
从我们现有的情况来看有关设置 SHMAX 的 RedHat 文档:
此参数定义 Linux 进程可以在其虚拟地址空间中分配的单个共享内存段的最大大小(以字节为单位)。例如,如果您在 32 位平台 (x86) 上使用 Red Hat Enterprise Linux 3 smp 内核,则用户进程的虚拟地址空间为 3 GB。如果您在 32 位平台 (x86) 上使用 Red Hat Enterprise Linux 3 Hugemem 内核,则用户进程的虚拟地址空间几乎为 4GB。因此,在 32 位体系结构的 smp 内核上将 SHMMAX 设置为 4GB - 1 字节(4294967295 字节)不会将共享内存段的最大大小增加到 4 GB -1。即使在 32 位架构上使用 Hugemem 内核将 SHMMAX 设置为 4 GB - 1 字节,进程也无法获得如此大的共享内存段。事实上,使用 Hugemem 内核的 Oracle 10g R1 SGA 的共享内存段的上限约为 3.42 GB(约 36.7 亿字节),因为共享库等其他内容也需要虚拟地址空间。这意味着如果在 32 位系统上有 3 个 2 GB 共享内存段,则任何进程都不能同时连接到多个共享内存段。另请注意,如果您在 32 位系统上将 SHMMAX 设置为 4294967296 字节 (4*1024*1024*1024=4GB),则 SHMMAX 本质上将设置为 0 字节,因为它环绕 4GB 值。这意味着在 32 位系统上 SHMMAX 不应超过 4294967295。在 x86-64 平台上,SHMMAX 可以比 4GB 大得多,因为虚拟地址空间不受 32 位限制。由于 SGA 由共享内存组成,SHMMAX 可能会限制 SGA 的大小。 SHMMAX 应略大于 SGA 大小。如果 SHMMAX 太小,您可能会收到类似于以下内容的错误消息:
ORA-27123: 无法附加到共享内存段
上海商城
从我们现有的情况来看有关设置 SHMALL 的 RedHat 文档:
该参数设置系统范围内可以使用的共享内存页面的总量。因此,SHMALL 应始终至少为 ceil(shmmax/PAGE_SIZE)。
Red Hat Enterprise Linux 2.1、3、4 和 5 中 SHMALL 的默认大小为 2097152,这也是 Oracle 在 x86 和 x86-64 平台上建议的 9i 和 10g 的最小设置。在大多数情况下,此设置应该足够了,因为这意味着系统上可用的共享内存总量为 2097152*4096 字节 (shmall*PAGE_SIZE),即 8 GB。 PAGE_SIZE通常是4096字节,除非你使用第14章,大内存优化,大页面和大页面,它支持更大的内存页面的配置。
如果您不确定 Linux 系统上的默认 PAGE_SIZE 是多少,可以运行以下命令:
$ getconf PAGE_SIZE