ODP.Net - OracleDataReader.读取速度非常慢

2024-05-22

我在 ODP.Net 中的 OracleDataReader 方面遇到很多麻烦。基本上,我有一个参数化查询,需要 1-5 秒的时间来运行(返回大约 450 条记录),然后需要 60-90 秒的时间来循环(甚至没有代码在循环中运行,实际上是迭代记录集并执行没有什么)。

当我从 Aqua Data Studio 运行它时,需要 1-5 秒。 当我从 .Net 运行它时,cmd.ExecuteReader() 返回需要 1-5 秒。 当我使用 OracleDataReader.Read 循环遍历 450 条记录时,需要 60-90 秒才能完成。

我什至取出了循环中的所有代码,只有一个空白的“While dr.Read”,但仍然需要 60 到 90 秒来循环这 450 条记录(我使用秒表来获取 cmd.ExecuteReader 的时间)然后围绕空的 dr.Read 循环)。

我尝试过设置 FetchSize,但没有帮助(而且,我的测试用例中只有 450 条记录)。 我尝试使用连接字符串关闭自动调整,它进一步降低了性能。

当返回少量数据时,为什么 OracleDataReader.Read 花费如此长的时间(而其他工具在很短的时间内为同一查询返回相同的数据)?

    Using conn As New Oracle.DataAccess.Client.OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("oracle_dss").ConnectionString)                 
    conn.Open()
    Using cmd As OracleCommand = conn.CreateCommand
        cmd.BindByName = True
        cmd.CommandText = ""  ' removed SQL to make this more readable

        ' Month end
        Dim paramMonthEndDate As OracleParameter = cmd.CreateParameter
        paramMonthEndDate.ParameterName = ":month_end_date"
        paramMonthEndDate.DbType = DbType.Date
        paramMonthEndDate.Value = monthEnd
        cmd.Parameters.Add(paramMonthEndDate)

        Dim sw As New System.Diagnostics.Stopwatch
        sw.Start()

        cmd.FetchSize = 1000
        Dim dr As OracleDataReader = cmd.ExecuteReader
        dr.FetchSize = dr.RowSize * 1000

        sw.Stop()
        Me.Log(String.Format("Month End Query: {0}s", sw.ElapsedMilliseconds / 1000))

        sw.Reset()
        sw.Start()

        While dr.Read

        End While

        sw.Stop()

        Me.Log(String.Format("Month End Query through recordset: {0}s", sw.ElapsedMilliseconds / 1000))

        dr.Close()
            End Using
    conn.Close()
End Using

与您的 DBA 合作,要求他们为独立运行(aqua data studio)和您的 odp.net 调用获取解释计划,并确认它们实际上是相同的。如果不是,那么这可能可以解释您的问题。然后,您可以尝试将“enlist=false”添加到连接字符串中,但更好的是让 DBA 更新相关表上的统计信息,希望修复缓慢的计划。看https://stackoverflow.com/a/14712992/852208 https://stackoverflow.com/a/14712992/852208了解更多信息。

我也遇到过同样的问题,这归结为当可能涉及分布式事务时,Oracle 对执行计划不太乐观。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ODP.Net - OracleDataReader.读取速度非常慢 的相关文章

随机推荐

  • 查找具有不同强度/亮度的相似图像

    假设我有如下图像 我可以选择什么来比较两个图像之间的相似度 显然它们是相同的图像 只是亮度不同 我找不到任何可行的方法 目前我最好的选择是训练 cnn 或自动编码器并比较输出的特征向量 但这似乎有点矫枉过正 任何提示将不胜感激 相当强大的工
  • Aurelia HttpClient 取消请求

    我正在尝试构建一个自动完成组件 并希望使其在键入时取消对服务器的未解析请求 我在 HttpClient 的文档中找不到与此相关的文档 它提到它是可以取消的 与获取不同 但没有提到如何取消 https aurelia io docs plug
  • 使用列中的日期范围扩展 pandas 数据框

    我有一个 pandas 数据框 其日期和字符串与此类似 Start End Note Item 2016 10 22 2016 11 05 Z A 2017 02 11 2017 02 25 W B 我需要将其扩展 转换为以下内容 在之间填
  • 有没有办法从 EntityManager 获取所有托管实体

    我正在设置一个基本的测试数据实用程序 并希望跟踪 EntityManager 处理的所有数据 有没有一种方法可以一次性获取 EntityManager 管理的所有内容 而不是仅仅为每个实体提供一堆列表 所以代替这个 EntityManage
  • ASP.Net 5 RC2 配置节绑定

    我刚刚将示例应用程序从 RC1 升级到 RC2 但我找不到如何将 appSettings json 文件的特定部分绑定到我自己的 POCO 样本位于https github com aspnet live asp net blob rc2
  • didReceiveRemoteNotification 将用户带到正确的视图

    我有一个聊天应用程序 当发送新消息时 我的服务器会发送推送通知 我遇到的问题是如何将用户带到正确的视图 我正在发送一个channelID在推送通知中 但我如何检索它并将用户带入实际对话 我使用此代码来检测何时单击推送通知 void appl
  • Android EditText默认数字键盘和允许文本[重复]

    这个问题在这里已经有答案了 可能的重复 EditText 默认带有数字键盘 但允许字母字符 https stackoverflow com questions 3544214 edittext with number keypad by d
  • 通过 HTML 或 JavaScript 禁用 Web 表单上的自动填充?

    有没有办法通过 HTML 或 JavaScript 禁用 Chrome 和其他浏览器中表单字段的自动填充 我不希望浏览器自动填写该浏览器以前用户的表单上的答案 我知道我可以清除缓存 但我不能依赖重复清除缓存 您可以在 HTML 的输入级别添
  • Android - 如何设置所有屏幕的背景颜色?

    维护字体和颜色样式的最佳实践是什么 我制作了一个 color xml 文件 用于更改按钮等单独元素的颜色 但我不确定 Android 希望开发人员如何组织他们的样式 例如 我希望所有屏幕都具有相同的背景颜色 我怎么做 我需要为每个 Acti
  • 在这种情况下,我如何处理 Function 和省略号/可变参数?

    我的项目之一是抛出 lambda 表达式 https github com fge throwing lambdas 我的目标是简化潜在的使用 FunctionalInterfaces in Streams 其在流中使用的唯一 缺陷 是它们
  • 如何检查向量是否是单个 NA 值,没有长度警告且没有抑制

    我有一个功能NA作为默认值 但如果没有NA应该是一个不限于大小 1 的字符向量 我有一个检查来验证这些 但是is na当向量是字符向量时产生标准警告length大于1 so function lt function x NA if is n
  • 检查用户是否从后端 Firebase 身份验证登录

    在我的前端 用户使用 Firebase 身份验证浏览器登录 那部分工作得很好 除了 Firebase 后端之外 我还有提供其他内容的 NodeJS 后端 但是 我需要仅向经过身份验证的用户提供内容 我的问题是 有没有办法让我的 NodeJS
  • 如何在Django中编写sql COALESCE

    我是姜戈的新手 如何将 COALESCE sql 查询集写入 django orm query SELECT COALESCE max CAST order no as UNSIGNED 0 as o id from nanossc Sal
  • 使用稍后在 C++ 中定义的类类型定义类成员

    就像我想做这样的事情一样 class Object public World Parent World This here Object World Parent World NULL Parent World Parent World c
  • Rails 4.1 AWS Beanstalk 找不到秘密密钥库

    我正在尝试在 AWS Beanstalk 上上传我的 Rails 项目 我已经运行 eb init eb start 并将数据库设置配置为指向 RDS 在我使用 git aws push 推送并等待 AWS 服务器启动后 提供的链接显示 5
  • 通过 Caffe 中的层提供数据的多种路径

    我想在 Caffe 中构建一个网络 其中传入的数据最初被分割 分别通过同一组层 最后使用 eltwise 层重新组合 此后 所有部件将作为一个斑点移动 除了学习的参数之外 数据并行移动的网络部分的层配置将是相同的 有没有一种方法可以在 Ca
  • 当 div 移动以填充其他淡出的 div 留下的空白空间时,如何为它们设置动画

    我有一组div 每个div对应一组类别 当我单击过滤器时 这将更改 div 的类 并根据这些类别使它们可见或隐藏 我控制 div 淡入 淡出的方式 它们做得缓慢而漂亮 但每次 div 消失时 保持不变的 div 会突然移动以填充隐藏的 di
  • Visual Studio 2010 - 在调试期间查看列表导致超时

    我正在尝试调试一个项目 突然遇到一个问题 如果我尝试查看它 枚举任何对象集合都会导致超时 如果我正常运行该程序 就没有问题 如果我尝试查看任何集合 例如列表 我会收到超时错误 整个事情就会崩溃 我认为我的一个更复杂的集合可能出了问题 所以我
  • 按不同日期拆分列表

    希望还有一个简单的 假设我有一个这样的集合 List
  • ODP.Net - OracleDataReader.读取速度非常慢

    我在 ODP Net 中的 OracleDataReader 方面遇到很多麻烦 基本上 我有一个参数化查询 需要 1 5 秒的时间来运行 返回大约 450 条记录 然后需要 60 90 秒的时间来循环 甚至没有代码在循环中运行 实际上是迭代