当我使用SELECT FOR XML传输5000条记录时,网络流量的开销是多少

时间:2016-09-10 18:31:18

标签: sql-server

我的C#应用​​程序需要每小时将批量的5000条SQL服务器数据记录转换为XML文件。

一个非常简单的选择是使用SELECT FOR XML并在服务器上转换SQL服务器记录,然后通过网络获取XML数据。

我担心SQL服务器上的额外负载和网络流量开销,因为XML数据比SQL服务器表格数据大得多。

我的担忧有效吗?

  1. FOR XML转换是否会消耗大量SQL服务器资源?
  2. SQL客户端是以纯文本形式传输XML数据还是具有更多数据     有效的机制?

1 个答案:

答案 0 :(得分:2)

如果选择Raw Xml,性能将优于Auto Xml,但确保性能低于选择表格数据。

我们针对这三种情况运行基准测试,并测量客户端和行/秒的执行时间。

这些值取决于服务器性能(内存,CPU,磁盘速度)和网络速度。

实验室环境:

 SQL Server: 64bit /16G Byte /windows 7
 The client: x86 (32 bit) , memory 2GB /windows 7
 Network Cards for both: 1Gb per second

对于数据库Adventureworks2012,表[Sales]。[SalesOrderDetail]的行号为:121317

将在客户端执行的sql语句是:

 Tabular data: select *  FROM Sales.[SalesOrderDetail]
 Raw Xml     : select *  FROM Sales.[SalesOrderDetail] FOR XML RAW 
 Auto Xml    : select *  FROM Sales.[SalesOrderDetail] FOR XML AUTO 

下表显示了选择121317行的三种情况下的执行时间:

  Mode     Time[Sec]    Row_per_second
  tabular   0.41        298810
  Raw Xml   1.11        109492
  AutoXml   5.61        21621

 application: Dotnet 4.5 , sqlclient

下图显示了时间条形图和rows_per_second:

Rows per second

图(1):每秒行数

enter image description here

图(2):第二次检索时间

<强>结论:

Tabular数据的性能优于Raw Xml而不是Auto Xml。 performanane依赖于行大小,服务器/客户端性能(内存,CPU)和网络速度。

对于5000行的数据大小,时间差异很小,可能是秒的小数部分。

<强>更新

FOR XML转换会消耗大量SQL服务器资源吗?

XML数据类型实现为CLR数据类型。通常,SQL服务器中的CLR比T-SQL UDF和TVF(在不同程度上)更快。

参考: CLR Performance Testing

XML转换的主要开销是不同模式下的xml数据的大小(Raw Xml是使用Attributes的紧凑大小,而使用Elements的Auto xml大小,使用Elements)从服务器到客户端的网络与表格数据的大小相比。

服务器资源开销很小,可以忽略不计。 因此,xml流主要是网络资源开销。

SQL客户端是以纯文本形式传输XML数据还是具有更高效的机制?

XML数据以纯TEXT UTF-16传输(DOT-NET中的所有字符串数据类型均为UTF-16)