Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。

本文包括了对英文白皮书的翻译,和我觉得较重要的要点总结。

执行概述

Oracle Database 12 引入了一项新功能:高级网络压缩,作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析。

简介

数据压缩技术提供了一种将数据转换为较小尺寸的替代数据格式的方法。 这些技术可用于在发送端压缩要通过网络传输的数据,然后在接收端转换回原始数据以减少网络流量。

高级网络压缩可减少通过数据连接传输的 Oracle Net 会话数据单元 (SDU) 的大小,从而减少传输 SDU 所需的时间。 这对于客户端应用程序和服务器进程来说仍然是透明的。

使用高级网络压缩的一些好处包括:

  • 提高有效网络吞吐量:压缩可以在更短的时间内传输大型数据集。 由于传输时间减少,SQL 查询响应速度更快,尤其是在带宽受限的环境中。

  • 降低带宽利用率:压缩通过减少要传输的数据量来节省带宽,从而允许其他应用程序使用它。 这也有助于减少提供网络带宽的成本。

启用高级网络压缩的参数

本节提供配置详细信息以启用客户端服务器数据库连接的压缩。 压缩选项涉及在双方启用该选项之前在连接建立时客户端和服务器之间的协商。

在 sqlnet.ora 中

压缩参数可以在 sqlnet.ora 文件中配置,该文件同时驻留在客户端和数据库服务器上。 压缩参数包括:

  1. SQLNET.COMPRESSION:
    将此参数设置为 ON 或 OFF 可启用或禁用该环境的压缩选项。 该参数的默认值为“OFF”。
    该选项是在连接建立时在客户端和服务器之间协商的,如果客户端和服务器都将其设置为ON,则该连接将使用压缩。
    例如,
SQLNET COMPRESSION = on
  1. SQLNET.COMPRESSION_LEVELS:
    根据要求指定低和高两个压缩级别。 LOW 级别使用较少的 CPU,但提供较低的压缩比,而 HIGH 级别使用更多的 CPU,并提供较高的压缩比。
    一般来说,我们认为 LOW 级别在 CPU 使用率和压缩比之间提供了良好的权衡。 因此,该参数的默认设置为 LOW。
    压缩级别在连接建立时使用,以验证两端使用哪些级别,并选择公共的级别。
    例如,
SQLNET COMPRESSION_LEVELS = (low, high)
  1. SQLNET.COMPRESSION_THRESHOLD
    此参数可用于指定应执行压缩的最小数据大小(以字节为单位)。 如果 SDU 的大小小于此值,则不会对该 SDU 执行压缩。 该参数的默认值为 1024 字节。
    例如,
SQLNET COMPRESSION_THRESHOLD = 2048

在 tnsnames.ora 中

客户端还可以通过单个连接的网络描述符启用压缩并指定压缩级别。 以下参数可在 tnsnames.ora 中单个 t 字符串的描述级别设置。

  1. COMPRESSION
  2. COMPRESSION_LEVELS
    COMPRESSION_LEVELS 是可选参数,如果不指定,则使用 LOW 级别。 COMPRESSION 参数的默认值为 OFF。

例如,

net_service_name=
(DESCRIPTION=
(COMPRESSION=on)
(COMPRESSION_LEVELS=(LEVEL=low)(LEVEL=high))
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
(CONNECT_DATA=
(SERVER_NAME=sales us example com)))

如果在连接描述符级别设置参数,则它们优先于 sqlnet.ora 中指定的值。

网络性能分析

本节评估不同带宽条件下典型 SQL 查询的压缩对网络性能的影响。 为了比较网络性能,传输相同数据集的总时间(SQL 查询响应时间)被用作性能指标。

使用文本数据进行实验
一个包含 4 列和 26,516 行的表,每行包含大约 10KB 的文本
数据存储在数据库中。 客户端使用 SQL 查询“select * from table”来获取全表数据。 数组大小设置为 5000。在此设置中,客户端和服务器之间的网络往返时间 (RTT) 为 37 毫秒。 实时测量从服务器接收数据的总时间并将其用作性能指标。

在这里插入图片描述

图 1:查询响应时间与网络带宽(文本数据)

使用混合数据进行实验

数据库服务器中存储了一个包含 5 列和 100 万行的表,每行包含 50 字节的混合字符和数字数据。 客户端使用 SQL 查询“select * from table”来获取全表数据。 数组大小设置为 5000。
此设置中客户端和服务器之间的网络往返时间 (RTT) 为 37 毫秒。 从服务器接收数据的总时间是实时测量的,并用作性能指标。

在这里插入图片描述

图 2:查询时间与网络带宽(混合数据)

这些数字表明压缩打开(低和高)和关闭时 SQL 查询响应时间的性能差异。 与不使用压缩相比,使用压缩的 SQL 查询响应速度更快。 随着带宽越低,压缩的效果就越明显。

高级网络压缩的建议

启用压缩可能并不总是能提高性能,并且会受到多种因素的影响。 本节提供有关高级网络压缩何时提高性能的指南。

仅当要传输的数据的生成速率高于网络上发送数据的速率时,才可以使用网络压缩来增加有效的网络吞吐量。 这是因为,当带宽较高时,网络不会阻塞任何数据,所获得的吞吐量相当于数据的生成速率。

当用于大型结果集时,高级网络压缩的性能更高。 当要发送的数据较小时应避免使用它,因为它只会增加额外的 CPU 开销,并且对网络吞吐量的影响可以忽略不计。

CPU 利用率随着压缩而增加,因此每当使用压缩时,建议使用更快的 CPU。 CPU 速度越快,压缩速度就越快,性能增益就越高。

性能增益还取决于发送数据的压缩比。 压缩率取决于数据的性质。 文本数据通常比二进制或已经压缩的数据(例如图像或电影文件)更可压缩。

配置压缩时应谨慎考虑上述所有因素。

结论

高级网络压缩不仅使 SQL 查询响应更快,而且还节省带宽。 此功能对于客户端应用程序和服务器进程是透明的。 当用于具有快速 CPU 的主机之间的低带宽连接时,它可以显着提高性能。

要点总结

  • 高级网络压缩的好处是:减少局域网 (LAN) 和广域网 (WAN) 环境中的网络延迟并提高性能。
  • 高级网络压缩包含在高级压缩选件中,因此需要Oracle企业版。
  • 高级网络压缩可以在3个级别启用,我觉得范围越广越少用:
    • (1) 连接级别(连接字符串、URL)
    • (2) 服务级别(tnsnames.ora、ldap.ora)
    • (3) 数据库级别 (sqlnet.ora)。

参考

  • Advanced Network Compression – A Lessor-Known Feature of Advanced Compression
  • Oracle Database Features
  • SQLNET.COMPRESSION