.NET IIS 连接oracle频繁出现ORA-50012: Pooled connection request timed out

某医院客户一套.NET开发的应用,部署在Windows IIS 服务上,数据库是Oracle 12.1 RAC, 总是在早高峰时出现ORA-50012 Pooled connection request timed out的错误,困扰了客户好久,找到我们帮忙解决,下面简单记录。

应用日志

Oracle.Managed DataAccess, client,OracleException (0x80004005);: 0RA-50012: Pooled connection reauest timed out
+ oracleInternal.ConnectionPool.Poolmanager3.get()。。。

常见原因

连接数据耗尽或配置的最大连接不合理,或者是连接溢出

查看数据库连接串

connectionstring="data source=192.168.xxx/dbm;password=*****;persist security info=True;user id=his" />

并不是所有ora开头的报错都是数据库服务端的问题,客户反馈没有配置额外的中间件,从连接串中也没有看到connect pool。 首先排除使用了oracle 数据库服务端的connectpool.

SELECT * from cdb_cp_info;

Status=INACTIVE, 并没有使用数据库的connect pool。

ODP.NET 默认是用connect pool的, 连接串中可以指定参数,如果不指定也会有一些默认参数,常用的有:

POOLING:启用连接池 默认true
MAX POOL SIZE:连接池中CONNECTION最大数量 ,默认100
MIN POOL SIZE:连接池中CONNECTION最小数量 默认1
CONNECTION TIMEOUT:建立物理连接的超时时间,默认15s

查看了数据库的最大连接为1000,平时使用很少,以当时的连接频率即使使用短连接也没有任何问题。

解决方法

1, 加大connect pool 连接size

connectionstring=”…..Max Pool Size=500;Connection Timeout=30;”

2,禁用connect pool

不使用连接池(Pooling=FALSE)

Leave a Comment