[英].NET Oracle managed data access connection pooling not working or slow
我最近注意到,当我们的应用程序对Oracle数据库执行SQL查询时,它总是至少需要200毫秒才能执行。 无论查询多么简单或复杂, 最短时间约为200毫秒。 我们正在使用Oracle 11g的Oracle Managed Data Access驱动程序。
然后,我创建了一个简单的控制台应用程序来测试连接。 我注意到,如果像下面的示例那样创建连接,那么每个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
方法是免费的。
经过大量的测试和研究,我终于弄清楚了额外的200毫秒来自何处:我的虚拟计算机的网络适配器。 我正在使用VMWare Player,并且连接已配置为“ NAT”模式。 当我将连接更改为“桥接”模式时,延迟被删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.