Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#获取从和SQL查询返回的数据的大小_C#_Database_Oracle10g_Metrics - Fatal编程技术网

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

C#获取从和SQL查询返回的数据的大小,c#,database,oracle10g,metrics,C#,Database,Oracle10g,Metrics,执行查询时,如何获取从数据库返回的数据的字节大小?原因是使用两种不同的技术比较数据库服务器上的负载。我们正在运行从同一数据集构建的报告,该数据集将为每个报告加载整个数据集。现在我们正在缓存数据集并从缓存中运行报告。我们为每个客户机运行报告,有些数据集比其他数据集大得多,我需要一些方法为数据库服务器负载减少提供一个可测量的指标 我曾尝试通过DbConnection、DbDataReader和DbCommand查找任何现有功能,但找不到它。如果可能的话,最好测量给定连接或读卡器的数据吞吐量,但任何解

执行查询时,如何获取从数据库返回的数据的字节大小?原因是使用两种不同的技术比较数据库服务器上的负载。我们正在运行从同一数据集构建的报告,该数据集将为每个报告加载整个数据集。现在我们正在缓存数据集并从缓存中运行报告。我们为每个客户机运行报告,有些数据集比其他数据集大得多,我需要一些方法为数据库服务器负载减少提供一个可测量的指标

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


数据库是Oracle 10g。

除了在整个数据库上循环外,无法获得结果集的大小。若从PreFace的角度看,您负担不起,那个么可以从结果集第一行的服务器返回结果集的大小。或者返回两个结果集。

一种可能是简单地使用网络嗅探器。非常好。按连接进行度量(当在给定的机器上使用多个连接时)是很困难的,但是您可以使用它来度量与客户机之间的所有通信量。这样做的一个好处是,它还可以测量传出请求,在您的情况下(报告生成),传出请求应该很小,但仍然是整个负载的一部分

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


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

您尝试过在数据库端测量它吗?Oracle 10g似乎有。

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

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


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

我不知道它是否能在您的特定情况下帮助您,但您是否尝试过SQL Server Profiler?我应该更具体地说,它是一个oracle 10g数据库。我们打算对所有这些数据进行循环。我关心的是如何确定从数据库服务器发送到客户机的数据量,包括所有元数据,而不仅仅是行长度。我使用了桌面应用程序,但我确实看到它是开源的,所以我可以想出一些方法从代码中获取这些信息。“到目前为止,这已经满足了我的需要,谢谢你。”尼克拉森:我很高兴它奏效了。我是客户机/服务器产品的开发人员,有时我使用网络嗅探器正是为了这个目的。我喜欢这本书,因为它描绘了一幅非常清晰的画面。到目前为止,我对这本书的阅读非常好,但主要是性能监控工具,比如数据库在派生数据集方面所做的工作。应用程序中的更改并没有修改正在运行的实际查询,只是修改了这些查询正在运行的次数。