繁体   English   中英

C#获取从中返回的数据大小和SQL查询

[英]C# Getting the size of the data returned from and SQL query

执行查询时,如何获取从数据库返回的数据的大小(以字节为单位)? 这样做的原因是使用两种不同的技术来比较数据库服务器上的负载。 我们正在运行从相同数据集构建的报表,这将为每个报表加载整个数据集。 现在,我们正在缓存数据集并从缓存中运行报告。 我们为每个客户端运行报告,一些数据集明显大于其他数据集,并且我需要某种方法来提供可衡量的指标来减少数据库服务器的负载。

我尝试通过DbConnection,DbDataReader和DbCommand查找任何现有功能,但无法找到它。 如果可能,最好测量给定连接或读取器的数据吞吐量,但是任何解决方案都是可以接受的。 也许有一个我可以用来衡量的数据库服务器代理?

该数据库是Oracle 10g。

一种可能性是仅使用网络嗅探器。 Wireshark非常好。 按连接进行度量(在给定计算机上使用多个连接时)比较棘手,但是您可以使用它来度量往返客户端计算机的所有流量。 这样做的好处之一是它还可以测量传出的请求,在您的情况下(报告生成),传出的请求应该很小,但仍然是总负载的一部分。

用这种方法进行度量的另一个好处是,它将发现发出的请求大小不同(如果有)。 例如,如果一种方法导致在单独的请求中从服务器读取单个记录,而另一种方法导致在一个请求中读取记录的“批处理”,那么您将能够看到这些差异。 在这种情况下,这两种方法都可能表明DbDataReader级别的总数据相同,但是第一种方法将导致更多的网络流量。

Wireshark显示了很多统计信息可能对此有用。 它可以给出数据包总数,数据包平均大小,总大小,每秒平均字节数等。

您是否尝试过在数据库方面进行测量? Oracle 10g似乎具有一整套性能调整和监视工具

除了遍历整个结果集,您无法获得结果集的大小。 如果您不能从表演前的角度承受它,则可以在结果集的第一行中从服务器返回结果集的大小。 或返回两个结果集。

我认为没有任何简单的方法可以做到这一点。 为了获取元数据,您确实需要不通过DbDataReader或DataRow将数据表示为DataSet或DataTable,以便所有键,列和元数据都表示为一个整体。

我将要做的是创建一个二进制格式化程序和memorystream,并将DataSet / DataTable作为二进制数据序列化到memorystream中。 然后,您应该能够从流中询问长度。 这应该可以非常准确地告诉您有关问题的数据大小

这可能是一个性能杀手,因此您可能只想在调试环境中使用它,以便了解您的数据大小

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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