sqlplus login hang, syscal高, 频繁的实例重启 11.2.0.4 RAC on SunOS 5.10 (Solaris)

张维照 2019-05-31
11
0 0
摘要:当实例终止后, 先挂到NOMOUNT 状态, 排除db存储原因, 发现sqlplus / as sysdba依旧hang, 这个阶段加载库文件, 访问内存区, 另一个实例还在正常的运行, 加上当时一些操作系统命令都无法返回, 且当时syscall 达到了50% , 于是怀疑是该操作系统的内存管理方面的问题.

问题描述

前段时间客户这里有套数据库其它厂家维护, 最近半年总是频繁的重启,  之前也找O原厂的看过, 当时出现的IPC timeout之类的, 原厂建议是排查网络问题,  年前又一次又出现了问题,朋友找我帮忙看一下, 这个问题以前没有遇到过, 但是经调整后经过时间验证没有再出现类似问题.

这是一套11.2.04 2节点4实例2数据库的CLUSTER, 每个节点上有2个实例, 每过一段时间其中1个节点上1个实例就会挂起hang死和实例驱逐重启,  主机环境是基于X86 64的Solaris OS (sunos 5.10)操作系统, 496 CPUs, 1TB的内存, 使用RAW裸设备存储, 主机资源空闲. 问题其间数据库HANG ,操作系统命令如df, vmstat等命令都没有返回.  主机上使用sqlplus / as sysdba 都挂起 无法终止.  当时使用truss 跟踪了sqlplus进程只输出一个read 内存地址后没有变化.  因为是内网当时无法查询资料, 当实例终止后, 先挂到NOMOUNT 状态, 排除db存储原因, 发现sqlplus / as sysdba依旧hang,  这个阶段加载库文件, 访问内存区, 另一个实例还在正常的运行, 加上当时一些操作系统命令都无法返回, 且当时syscall 达到了50% , 于是怀疑是该操作系统的内存管理方面的问题.


专家解答

查看当时数据库的内存参数大小是否合理时, 发现分配的内存并不多,但是使用了AMM, ASMM Oracle 11g自动内存管理上的一些特性,  建议客户改用手动管理测试一下, 后来创建了pfile,修改并指定了各组件内存区的大小, 全手动指定的大小, 启动数据库到OPEN 状态, 终于数据库恢复了正常. 之前的sqlplus hang问题不再有.  随后观查了2个多月再也没有发现实例重启和其它性能问题.

回来后在MOS上发现了1606318.1 记录发现应该就是Solaris DISM特性的问题, 在UNIX系统中功能上有很多相似之处, 但是同样也有一些新特性.  如果我们对OS 不是特别的专业, 建议按装Oracle不同平台的最佳实践配置系统参数.  如Solaris OS 平台上ORACLE是建议禁用DISM, 同样其它平台也有一些公认的小特性, 如果没有注意可能会遇到一些意想不到的问题, 想linux上的HP(hugepage), THP, Suse老版本对hugepage和RHEL还有些区别, 还有AIX上VM环境中的PROCESS折叠特性, HPUX 平台上与APA相关的补丁及I/O Timeout 相关的参数.

对于Solaris DISM特性也是为了配合ORACLE 自动内存管理引入的特性,解决原ISM管理的缺陷, 但是看来自动管理实现空间出现一些小”惊喜”, 我上面改数据库的内存管理为手动其实是间接关闭了ORACLE 使用的DISM特性. 根据MOS上的描述

From a Database and/or Clusterware perspective the Symptoms include:
Overall Poor Performance including login problems
Processing Delays Resulting in IPC errors
Instance Evictions
Node Evictions
From a system perspective the Symptoms include:
High System Time (often exceeding 50%)
GUDs will show numerous threads in the ipc_get system call
Excessive swap usage
Kernel Panics

其实上面这些现象在问题前的一段时间里都出现过.

什么情况下是启用DISM?  552633.1

To be more precise, when available on the system, DISM is used according to the following rules:
9iR2
If SGA_MAX_SIZE is set

10g
If SGA_MAX_SIZE > SGA_TARGET (including when SGA_TARGET = 0)

11g
If Automatic Shared Memory Management (ASMM) is used and SGA_MAX_SIZE > SGA_TARGET (including when SGA_TARGET = 0)
If Automatic Memory Management (AMM) is used as and MEMORY_TARGET or MEMORY_MAX_TARGET is set

同样可以使用pmap 进程查看oracle进程确认是DISM or ISM?

如何禁用DISM?

Disable the use of DISM by the database on Oracle Solaris in one of two ways:

Unset the SGA_MAX_SIZE / MEMORY_MAX_TARGET / MEMORY_TARGETparameters

Ensure SGA_MAX_SIZE is set to the same value as SGA_TARGET parameter or equal to the sum of all SGA components in the instance.

DISM is not supported for use on SuperCluster M7 Oracle Solaris environments in instances other than the Oracle ASM instance.


「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
近期活动
全部
相关课程
全部