数据库宕机,在启动实例时报错ORA-27102:
第一感觉就是内存不够,用top命令查看内存,使用率不高,所以也不是内存不足问题。
接下来去查看下操作系统内存参数shmmax和shmall,发现数值不知按照实际内存大小配置的。
简单介绍下这2个参数的作用:
shmmax:是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降
shmall:该参数控制可以使用的共享内存的总页数。 Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
这两个可以设置为内存的 90%,计算方法
shmmax = 物理内存(bytes) / 2 * 90%
shmall = 物理内存(bytes) / pagesize(通常是4096) * 90%
例如,物理内存为64G
shmmax=64 x 1024 x 1024 x 1024 / 2 x 90%=30923764531
shmall= 64 x 1024 x 1024 x 1024 / 4096 x 90%=15099494
根据实际内存大小来配置shmmax和shmall后,数据库就正常启动了。