【ASK_ORACLE】LOCK_SGA参数失效的解决办法

来源:这里教程网 时间:2026-03-03 16:50:31 作者:

实验环境 搭建平台:VMware WorkstationOS:RHEL 6.10Grid&DB:Oracle 11.2.0.4 问题描述在Oracle启动时设置了参数LOCK_SGA为“TRUE”,想把SGA固定到内存中,但是参数不生效。使用命令“ipcs -m”检查我们可以看到该段未锁定在内存中( status未显示“locked”):# ipcs -m------ Shared Memory Segments --------###此处省略部分输出###key            shmid    owner  perms  bytes              nattch       status 0xf7fff118 458758  oracle   600      42815455232 1353 并且从启动OS的跟踪日志就可以看到SHM_LOCK是由Oracle进程设置的:10068 shmctl(196610, IPC_64|IPC_RMID, 0) = 010068 shmget( 0xf7fff118, 42815455232, IPC_CREAT|IPC_EXCL|SHM_HUGETLB|0600) = 45875810068 shmctl(458758, IPC_64| SHM_LOCK, 0) = 0  解决办法排查发现OS配置了HugePages,在这种情况下,段不能被锁定或解锁,并且OS内核永远不会设置锁定标志。因为HugePages已经把SGA固定在内存中了。所以, 只需要删除HugePages的配置参数并重启OS就能解决。注:如何配置 HugePages可参考文档(删除里面的参数并重启即可): http://blog.itpub.net/69992972/viewspace-2764357/ 完成前面的步骤后再次执行“ipcs -m”发现status变成“locked”,说明参数生效: # ipcs -m------ Shared Memory Segments --------###此处省略部分输出###key            shmid    owner  perms  bytes               nattch   status0xf7fff118 458758  oracle   600      42815455232  1353    locked

注:

1. 在Linux和AIX上,把Oracle(需要10gR2及更高版本)的初始化参数PRE_PAGE_SGA 和LOCK_SGA设置为“TRUE”可以将SGA固定到内存中且不产生swap。但是HugePages已经使SGA固定到内存中且不产生swap,因此不需要这些参数来再次使SGA固定。

2. 本人推荐使用 HugePages来固定SGA

相关推荐