从SQL Server检索的数据是否经过压缩以进行传输?


20

从Microsoft SQL Server检索的数据是否已压缩?如果这是由连接字符串控制的,是否有任何简单的方法来判断是否有任何特定的应用程序正在使用它?

我正在研究分析工具,数据量可能需要几分钟才能通过我们的网络传输。我想知道如果我们从同一远程服务器上的压缩数据存储中提取数据,是否应该期望性能提高。

只要我们关注这个话题,我都会很好奇:数据是以二进制还是ASCII传输的?例如,如果12345从一INT列中查询该值,则将其作为五个字节0x31、0x32、0x33、0x34、0x35传输;该值所需的两个字节;还是该列需要四个字节?

明确地说,我知道有一些选项可以压缩存储数据并进行备份。我在问数据如何传输。


压缩是一种内部机制。页面在磁盘上和缓冲池中被压缩,但在网络上却是常规字节流。@ShawnMelton以前曾在博客上发表有关嗅探导线格式的文章,并希望能以亮点形式予以回应。
Mark Storey-Smith

我写的内容更多地集中在是否加密上。我可以选择可读格式的数据,尽管我没有尝试整数值。唯一可以确定的方法就是设置并尝试:mssqltips.com/sqlservertip/2436/…–
Shawn Melton

@ MarkStorey-Smith:答案是“否”,数据是否未压缩?真可惜,但这确实有助于解释为什么这些大查询可能要花这么长时间才能传输。看起来我需要一个物理上更近的缓存。如果您想提供一个实际的答案,我会接受的。
所有行业的乔恩

@ShawnMelton:听起来确实是正确的方法,但我只是没有足够的网络背景才能进入正确的层次并对我所看到的东西充满信心。对我来说幸运的是,有些人掌握了更多的技能,并且有更多的时间在手!
所有行业的乔恩

Answers:


16

您要压缩的数据是通过TDS通过电线发送的数据。这里有一些次要的压缩,但远不及页面/行压缩,备份压缩或ColumnStore压缩所获得的压缩类型。

之前已被要求:

http://connect.microsoft.com/SQLServer/feedback/details/412131/enable-network-compression-compress-tds-stream

http://connect.microsoft.com/SQLServer/feedback/details/377479/wan-compression-option

这些物品仍然开放,所以也许有些希望。我从未见过通过连接字符串来控制它的方法。

同时,有些产品声称可以做到这一点,例如

http://www.nitrosphere.com/products/nitroaccelerator/

http://toonel.net/tcpany.htm

您还可以潜在地配置SQL Server和应用程序服务器之间的网络以支持压缩(以及诸如加密之类的其他功能),但是您超出了本文的范围,并且我不确定SQL的每个功能是否都将支持此功能。服务器。

老实说,我不相信这是您要专注于优化的地方。压缩此流实际上可能会使速度变慢,并且超过发送较少字节的好处。我宁愿把钱花在服务器与客户端之间更好的网络连接上,而不是花时间在这类工作上进行投资,并测试它是否有任何实际好处-直到后来才这样做。从10/100到千兆光纤对网络I / O产生了已知可预测的影响。


我不确定通过网络发送的字节格式;为此,您将必须设置某种数据包嗅探器(或者可能有人已经这样做并且会发出声音)。

至于压缩的影响,除非您使用的是Fusion-IO或其他高端SSD类型的解决方案,否则几乎可以肯定,您当前受I / O约束,而不受CPU约束。因此,只要有CPU开销,启用压缩功能后,您应该会看到更快的性能(但这不会改变网络性能,因为在传输之前数据是未压缩的)。我说的是对服务器,应用程序,数据或使用模式一无所知-您很可能遇到极端情况,即压缩实际上会损害性能,或者数据不能很好地获得良好的压缩率。


至少在传输10 MB的内存时,绝对是网络问题。我可以在RDP上的服务器本身上以秒为单位查询数据,但是所说的服务器实际上不在状态,因此可以通过简单的文件操作或从本地计算机查询将数据复制到营业地点的计算机上-需要几分钟。
所有行业的乔恩,

因此,也许您应该复制,镜像或进行其他操作,然后从副本本地查询数据。这样,最终用户就不会感觉到延迟。您如何处理此问题取决于数据需要多新鲜。以及您是否真的需要最终用户一次查询10 MB的数据。
亚伦·伯特兰

究竟。除非我们可以重新定位BI服务器。关于数据量,该数据用于分析(使用QlikView,ATM),因此数据多年,并且具有许多维度和事实。文件范围可达100 MB 压缩,而这只是一对夫妇年的数据!
所有行业的乔恩

@JonofAllTrades表示最好的意图……听起来您正在尝试使用错误的解决方案来解决错误的问题。
Mark Storey-Smith

@ MarkStorey-Smith:有什么选择?数据很多,并且通过我们的WAN访问速度很慢。正如Aaron所提到的,某种本地缓存将有所帮助。减少传输的数据量将减少用户分析的范围,从而破坏了可视数据发现的目的。
所有行业的乔恩

4

从Microsoft SQL Server检索的数据是否已压缩?如果这是由连接字符串控制的,是否有任何简单的方法来判断是否有任何特定的应用程序正在使用它?

从技术上讲,结果可以非常轻微地压缩。

表格数据流(TDS)7.3B(首先由SQL Server 2008 R2支持)引入了一种称为空位图压缩的功能,该功能允许使用比空字段值通常所需的字节少的字节来传输包含多个空值的行。

服务器在发送结果时可以选择将常规行与空位图压缩行混合在一起。客户端对此没有控制权,因此没有相关的客户端配置选项可用。

空位图是TDS当前支持的唯一压缩形式。如果某行不是空位压缩的,则将其未压缩地发送。

只要我们关注这个话题,我都会很好奇:数据是以二进制还是ASCII传输的?

使用TDS协议定义二进制格式传输具有非文本数据类型的列。


2

如其他地方所述,要变通解决此问题,您可以考虑设置VPN并启用压缩。

正如其他人所说,SQL Server TDS协议没有内置压缩功能。值得一提的是,默认情况下也不加密。要启用加密,您必须使用证书并在连接字符串中指定它。

解决这两个问题的最简单解决方案是在启用加密和压缩的情况下打开VPN隧道。简单的Microsoft PPTP解决了这两个问题,并且易于设置。


1

为什么不设置一个本地SQL实例来缓存相关数据并每n小时进行一次同步?要查看的另一件事是预先计算多维数据集,并在到达摘要单元格时具有“获取详细信息”按钮。然后,将仅获取相关的详细行。


您的第一句话听起来很像这个评论
亚伦·伯特兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.