【发布时间】:2013-10-16 22:49:19
【问题描述】:
我有一个 MVC3 ASP.NET Web 应用程序,它使用 Oracle Data Provider for .NET (ODP.NET) x86 连接到 Oracle 数据库。我的应用程序中的以下代码将在 Oracle 数据库表中执行查询,然后使用 StreamWriter 将查询结果写入输出文件。
下面的代码每分钟从 Oracle 数据库表中读取大约 12,000 条记录(即使不使用流写入器写入输出文件)。
我想知道你们中是否有人知道提高性能以每分钟读取更多记录的方法 - 也许是您知道的另一个驱动程序?谢谢,非常感谢!
_dbCommand.CommandText = query;
using (var sw = new StreamWriter(output, append, Encoding.UTF8))
{
using (var reader = _dbCommand.ExecuteReader())
{
if (reader != null)
{
var count = reader.FieldCount;
while (reader.Read())
{
//get records
for (var i = 0; i < count; i++)
{
var txt = reader[i].ToString();
sw.Write(txt);
}
sw.WriteLine();
}
}
}
更新:
看起来瓶颈在于 ODP.NET。从我的 Oracle 数据库中的任何表中读取/迭代“选择前 10k”类型查询需要 53 秒。
_dbCommand.CommandText = query;
using (var reader = _dbCommand.ExecuteReader())
{
if (reader != null)
{
while (reader.Read())
{
}
}
}
【问题讨论】:
-
字段分隔符在哪里???。一个快速的胜利可能是让 sql 返回一列,例如 select A + '|' + B + '|' C 作为 MyTable 中的行,除非留置权长度很大。
-
但首先你应该看看瓶颈在哪里,数据库、网络或磁盘。
-
这也可能有用。让数据库做它的东西,然后移动文件。 stackoverflow.com/questions/9021810/…
-
感谢您的所有帮助,托尼!瓶颈在于 ODP.NET。从我的 Oracle DB 中的任何表中读取 10k 条记录需要 53 秒。在 oracle 本身中执行查询需要纳秒,所以我试图弄清楚为什么 ODP.NET 会减慢读取过程。有任何想法吗?你知道另一个更快的将 .NET 应用程序连接到 Oracle DB 的数据访问库吗?
-
现在你把问题隔离了,我想说你最好的选择是 DBA.StackExchange 中的一个特定问题。