.NET Oracle托管的数据访问连接池不工作或速度缓慢
本文关键字:工作 缓慢 速度 连接 访问 Oracle 数据 NET | 更新日期: 2023-09-27 18:26:24
我最近注意到,当我们的应用程序对Oracle数据库执行SQL查询时,执行至少需要200毫秒。无论查询有多简单或复杂,最短时间约为200毫秒。我们使用的是Oracle 11g的Oracle托管数据访问驱动程序。
然后我创建了一个简单的控制台应用程序来测试连接。我注意到,如果我像下面的例子一样创建连接,那么每个cmd.ExecuteReader
方法都需要额外的200毫秒(打开连接)?
using (OracleConnection con = new OracleConnection(connStr))
{
con.Open();
OracleCommand cmd = con.CreateCommand();
...
}
当创建这样的连接时,连接状态总是Closed
(如果连接被池化,它不应该是打开的吗?)。
如果我在程序开始时打开连接,然后将打开的连接传递给方法,则cmd.ExecuteReader
大约需要0-5毫秒才能返回。我尝试将Pooling=true
添加到连接字符串中,但它似乎没有任何作用(无论如何,它应该是默认值)。
这是否意味着连接池没有正常工作?或者cmd.ExecuteReader
需要额外的200毫秒才能执行,还有其他原因吗?
这个问题与本期几乎相同,只是我们使用的Oracle连接池比保持一个连接打开的慢
您的数据库是远程的吗?延迟是由网络造成的吗?在这种情况下,连接池是可行的,但问题是总是有TCP通信往返(甚至没有TNS数据包)。不幸的是,每次Open
调用都会发生这种情况。
托管数据访问实现以不同的方式进行通信,因此开销仅在第一次Open
调用时发生,然后Open
方法是免费的。
经过大量的测试和研究,我终于找到了额外200ms的来源:我的虚拟计算机的网络适配器。我使用的是VMWare播放器,连接被配置为"NAT"模式当我将连接更改为"桥接"模式时,延迟被消除