oracle somaxconn,升级11.2.0.3到11.2.0.4你可能不知道的事情

升级patchset是小事?不是,patchset的升级从来都不是小事。如12.1.0.1到12.1.0.2就多了一个引人注目的in-memory options。今天说一个你可能不知道的从11.2.0.3升级到11.2.0.4的变化。(Solaris操作系统)

在高并发的连接时,如果listener“太忙”,就会在tcpip这一层把包丢弃,我们可以在操作系统上用命令看:

# netstat -sP tcp

TCP tcpListenDrop = 0

tcpHalfOpenDrop = 0

1

2

3

# netstat -sP tcp

TCPtcpListenDrop=0

tcpHalfOpenDrop=0

如果上述两个值长时间大于0,说明有排队现象,会导致系统网络速度变慢。

对应于listener,我们可以适当的加大queuesize参数,来解决上面的问题。

可是问题是,在没有设置的情况下,默认值是多少?

在文档TNS-12535 / ORA-12535 on Connection to Database (Doc ID 214122.1)中有提及:

Solaris testing shows the following.

Solaris

Oracle Version Default QUEUESIZE Value

9.2 20423: listen(10, 5, 1)

10.1 26948: listen(10, 32, 1)

10.2 4621: listen(10, 32, 1)

11.1 12585: listen(10, 32, 1

11.2 552: listen(10, 32, SOV_DEFAULT)

From 10.1 onwards Solaris Oracle Net code is set to use value of 32.

This is fixed from release 11.2.0.4 and 12c onwards, that is Solaris QUEUESIZE will default use SOMAXCONN.

Note Unpublished Bug:13113888 Default Queuesize From Solaris not using OS Default

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Solaristestingshowsthefollowing.

Solaris

OracleVersionDefaultQUEUESIZEValue

9.220423:listen(10,5,1)

10.126948:listen(10,32,1)

10.24621:listen(10,32,1)

11.112585:listen(10,32,1

11.2552:listen(10,32,SOV_DEFAULT)

From10.1onwardsSolarisOracleNetcodeissettousevalueof32.

Thisisfixedfromrelease11.2.0.4and12conwards,thatisSolarisQUEUESIZEwilldefaultuseSOMAXCONN.

NoteUnpublishedBug:13113888DefaultQueuesizeFromSolarisnotusingOSDefault

也就是说,在10.1之后,11.2.0.4之前,queuesize的大小是固定值32,而11.2.0.4(含)之后,大小就直接使用操作系统参数SOMAXCONN。

我们来验证一下:

我当前系统是11.2.0.4,也就是说,是受到SOMAXCONN的限制。我先设置了queuesize=123。

4af5d0f50a5d56fb9d5885877100dafc.png

然后用truss开始跟踪:

a04accf06066bc9ece3a8ca8e579db2d.png

从truss中,我们看到第三行变成了我预设的那个值(注:不同的主机,不同的操作系统版本,grep出来的行数可能不同,不一定在第三行):

465528dc45e83a556556f7a439b62ff7.png

好,我们取消queuesize的设置,恢复成默认值。

78db6428513ef24b53d698a85488d072.png

然后我们继续truss,继续grep看truss的结果:

ac6777a5a8ce6bed55edbfe6a4e3c9db.png

看到第三行已经变成了128。

也就是说,在我不设置queuesize的情况下,我的11.2.0.4的数据库的listener的queuesize取决于操作系统参数SOMAXCONN,这个值是128。

而操作系统SOMAXCONN的值,我们其实可以看/usr/include/sys/socket.h文件,里面有SOMAXCONN的值:

f436ed2877b5fb9c2447fcd5463a43fd.png

最后,再说一下,在同一台主机上,还有一个11.2.0.3的数据库,按照上面的truss方法,得到的默认queuesize值为32。确实如文档所说。

所以,这篇文章介绍了用truss验证listener默认queuesize的大小。如MOS文档所说,不同版本的数据库,queuesize的大小是不一样的。

有时候,你从11.2.0.3升级到11.2.0.4,发觉连接风暴的问题缓解了,其实是内部行为不一样了,11.2.0.4默认取操作系统SOMAXCONN值,而现在的主机的SOMAXCONN,一般都比32要大。而这些变化,是Oracle Database 11g Release 2 (11.2.0.4) New Features不会提到的。:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值