【发布时间】:2011-09-22 21:10:48
【问题描述】:
我正在处理我们的 Web 应用程序的一些 Oracle 性能问题。我注意到似乎混淆了任何类型的测试的一件事是返回大量结果的简单查询仍然非常慢。一个例子是:
select * from TPM_PROJECTWORKGROUPS;
当我运行它时,我得到:
5825 record(s) selected [Fetch MetaData: 0ms] [Fetch Data: 59s]
[Executed: 9/22/2011 1:52:38 PM] [Execution: 203ms]
如果我理解正确,这意味着实际查询需要 203 毫秒才能运行,但需要 59 秒才能将该数据返回给客户端,在这种情况下是“获取”的意思吗?
我无权直接连接到数据库机器并在本地运行查询,但是可以安全地假设罪魁祸首是实际的网络带宽本身吗?这是有道理的,因为我在西雅图,服务器在纽约,但 5800 行仍然需要一分钟的吞吐量似乎相当慢。
对于 a) 确认网络带宽确实是问题和 b) 任何“陷阱”或检查为什么通过线路序列化数据如此缓慢的原因,是否有任何快速建议?谢谢!
基于评论的一些更新:
SELECT COUNT(*) FROM(从 TPM_PROJECTWORKGROUPS 中选择 *)t;
结果:
1 record(s) selected [Fetch MetaData: 0ms] [Fetch Data: 0ms]
[Executed: 9/22/2011 2:16:08 PM] [Execution: 219ms]
如果我尝试只选择一列:
从 TPM_PROJECTWORKGROUPS 中选择项目 ID;
结果:
已选择 5825 条记录 [Fetch MetaData: 0ms] [Fetch Data: 1m 0s]
[执行时间:2011 年 9 月 22 日下午 2:17:20] [执行时间:203 毫秒]
表架构:
项目 ID(编号) WORKGROUPID(编号)
【问题讨论】:
-
您确定 TPM_PROJECTWORKGROUPS 是表而不是视图吗?
-
一行的大小是多少?任何 CLOB/BLOB?
-
试试
SELECT COUNT(*) FROM (select * from TPM_PROJECTWORKGROUPS) t;看看有没有很大的不同 -
表中有哪些数据?例如,如果表有一个大的文本字段或二进制数据,这可以解释缓慢的获取时间。尝试选择一列并查看性能
-
@Conrad Frix 这是一个很好的建议,但您应该解释一下,这两个查询之间的差异与获取的数据大小直接相关。
标签: sql database oracle networking oracle11g