繁体   English   中英

.NET Oracle托管数据访问连接池无法正常工作或运行缓慢

[英].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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM