从 Microsoft SQL Server 检索的数据是否经过压缩?如果这是由连接字符串控制的,是否有任何简单的方法来判断是否有任何特定应用程序正在使用它?
我正在研究分析工具,通过我们的网络传输大量数据可能需要几分钟。我想知道如果我们从同一远程服务器上的压缩数据存储中提取数据,是否应该期望性能提高。
只要我们谈到这个话题,我就很好奇:数据是以二进制还是 ASCII 传输的?例如,如果12345
从列中查询该值,是否以INT
0x31、0x32、0x33、0x34、0x35 五个字节传输;该值所需的两个字节;还是列所需的四个字节?
需要明确的是,我知道有一些关于压缩存储数据和备份数据的选项。我在问数据是如何传输的。
您要压缩的数据是通过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 开销,您应该会在启用压缩的情况下看到更快的性能(但这不会改变网络性能,因为数据在传输之前是未压缩的)。我说,对您的服务器、您的应用程序、您的数据或您的使用模式一无所知 - 您很可能会遇到压缩实际上会损害性能的边缘情况,或者数据不是获得良好压缩比的良好候选者。
从技术上讲,结果可以非常轻微地压缩。
表格数据流 (TDS) 7.3B(最初由 SQL Server 2008 R2 支持)引入了一种称为空位图压缩的功能,它允许使用比空字段值通常所需的更少字节传输包含多个空值的行。
服务器可以在发送结果时选择将常规行与空位图压缩行混合。客户端对此没有控制权,因此没有相关的客户端配置选项可用。
空位图是 TDS 当前支持的唯一压缩形式。如果一行未压缩空位图,则将其发送未压缩。
具有非文本数据类型的列使用TDS 协议定义的二进制格式传输。
如其他地方所述,要解决此问题,您可以考虑设置 VPN 并启用压缩。
为什么不设置一个本地 SQL 实例来缓存相关数据并每 n 小时同步一次?其他要查看的是预先计算多维数据集并在到达摘要单元格时有一个“获取详细信息”按钮。这将只获取相关的详细行。