OS内核参数(SEM)在高负载的Oracle数据库中如何设置

本文详细介绍了Linux内核参数kernel.sem对Oracle数据库的影响,包括参数含义、查看方法以及在高负载环境下如何调整参数以避免连接故障和资源耗尽的问题。通过实际案例,讨论了SEMMSL、SEMMNS、SEMOPM和SEMMNI的合理设置,强调了SEMMNS和SEMMNI对数据库process链接数量的限制作用。
摘要由CSDN通过智能技术生成

点击上方"蓝字"

关注我们吧!

概述

d99eb4bb8116a6d82b75404c03aed6f3.png

文章主要围绕OS内核参数kernel.sem来讲解。在各类DB(ORA、PG、MYSQL等)安装手册中都会引导大家设置sem这个参数,很多初中级DBA大多是照本宣科并不明白其中含义,更不清楚如何设置才是正确的,在真实的高负载生产环境中未正确设置这个参数真的会产生“生产事故”。写本文的目的是引导DBA同仁避免和我一样踩到信号量的坑里去。

e55912b583145b61083eeddbfc272a98.png

01

参数含义

kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI

  • SEMMSL: Maximum number of semaphores per set(每个信号量组中信号量最大数量)

  • SEMMNS: Maximum number of semaphores system-wide(整个Linux系统中所有信号量的最大数量,建议是第1和第4个数字的乘积)

  • SEMOPM: Maximum number of semaphore operations per system call(每次semop系统调用可以同时执行的最大信号量操作的数量semopm。由于一个信号量组最多拥有SEMMSL个信号量,推荐将SEMOPM设置为SEMMSL的值)

  • SEMMNI: Maximum number of semaphore sets for the entire Linux system(设置系统中信号量组的最大数量)

02

查看当前的信号量方法

# cat /proc/sys/kernel/sem
250     32000   32      128  (这几个值分别是:SEMMSL, SEMMNS, SEMOPM, and SEMMNI)

接下来我详细描述一下自己遇到的两个真实案例。

e4d43cf1b1bc15690268dc095e435d1b.png

案例1:信号量设置过小引发的链接故障

92ed38fe61a9be9994b267388d3adf9a.png

背景:这是一套客户的核心RAC 2节点数据库,日常会话连接数稳定在12000左右。2019年12月3日凌晨因数据库session连接激增,单节点会话增加到164xx的时候就无法继续增加连接,而我们的process限制为30000。

贴出当时环境的会话连接信息:

952863047be219ad334e5c076f208812.png

查看当时alert日志:

节点1:
Process m000 died, see its trace file
Process m000 died, see its trace file
2019-12-03T01:26:04.312179+08:00
Process J000 died, see its trace file
2019-12-03T01:26:04.312263+08:00
kkjcre1p: unable to spawn jobq slave process
节点2
WAR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值