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

Jon*_*des 23 sql-server-2008 compression

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

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

只要我们讨论这个话题,我就很好奇:数据是用二进制还是 ASCII 传输?例如,如果12345INT列中查询值,是否将其作为五个字节0x31、0x32、0x33、0x34、0x35传输;该值所需的两个字节;或列所需的四个字节?

需要明确的是,我知道有一些关于压缩存储数据和备份数据的选项。我问的是数据是如何传输的。

Aar*_*and 19

您要压缩的数据是通过TDS在线发送的数据。这里有一些小的压缩,但远不及页/行压缩、备份压缩或列存储压缩所获得的压缩类型。

之前有人问过:

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 开销,您就会在启用压缩的情况下看到更快的性能(但这不会改变网络性能,因为数据在传输前未压缩)。我说的是,对您的服务器、您的应用程序、您的数据或您的使用模式一无所知 - 您很可能会遇到这样的边缘情况,即压缩实际上会损害性能,或者数据不适合获得良好的压缩率。


Ben*_*udo 5

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

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

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

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

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

只要我们讨论这个话题,我就很好奇:数据是用二进制还是 ASCII 传输?

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