我的C#应用程序需要每小时将批量的5000条SQL服务器数据记录转换为XML文件。
一个非常简单的选择是使用SELECT FOR XML并在服务器上转换SQL服务器记录,然后通过网络获取XML数据。
我担心SQL服务器上的额外负载和网络流量开销,因为XML数据比SQL服务器表格数据大得多。
我的担忧有效吗?
答案 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:
图(1):每秒行数
图(2):第二次检索时间
<强>结论:强>
Tabular数据的性能优于Raw Xml而不是Auto Xml。 performanane依赖于行大小,服务器/客户端性能(内存,CPU)和网络速度。
对于5000行的数据大小,时间差异很小,可能是秒的小数部分。
<强>更新强>
FOR XML转换会消耗大量SQL服务器资源吗?
XML数据类型实现为CLR数据类型。通常,SQL服务器中的CLR比T-SQL UDF和TVF(在不同程度上)更快。
XML转换的主要开销是不同模式下的xml数据的大小(Raw Xml是使用Attributes的紧凑大小,而使用Elements的Auto xml大小,使用Elements)从服务器到客户端的网络与表格数据的大小相比。
服务器资源开销很小,可以忽略不计。 因此,xml流主要是网络资源开销。
SQL客户端是以纯文本形式传输XML数据还是具有更高效的机制?
XML数据以纯TEXT UTF-16传输(DOT-NET中的所有字符串数据类型均为UTF-16)