Oracle 高级网络压缩 白皮书

news2024/10/2 1:39:39

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

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

执行概述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1402428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的儿童疫苗预约系统的设计与实现-计算机毕业设计源码12222

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 儿童疫苗预约管理,主要的模块包括查看首页、站点管理(轮播图、公告栏)用户管理(管理员、系统用…

【开源】基于JAVA语言的课程案例资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员需求分析2.2 用户需求分析 三、系统设计3.1 业务流程设计3.1.1 管理员业务流程设计3.1.2 用户业务流程设计3.1.3 首页功能模块及业务流程分析3.1.4 案例资源中心功能模块及业务流程分析3.1.5 用户信息中心功能模块…

seaborn可视化示例详解

目录 1、散点图 2、散点图回归线 3、折线图 4、频数柱状图 5、分组散点图 6、箱型图 7、数值分布柱状图 8、频数分布图 9、联合分布图 10、数值分布柱状图 11、相关系数热力图 划重点 少走10年弯路 Seaborn是一个基于Python的数据可视化库,Seaborn提供了许多用…

Keepalived + Nginx双主架构

Keepalived Nginx双主架构 环境准备: keepalived_master1服务器nginx:172.20.26.167 keepalived_master2服务器nginx:172.20.26.198 各服务器关闭selinux、防火墙等服务。 开机安装部署nginx 在172.20.26.167服务器上 yum install ngi…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (15) | 变分自编码器和扩散模型

前言 📚 笔记专栏:斯坦福CS231N:面向视觉识别的卷积神经网络(23)🔗 课程链接:https://www.bilibili.com/video/BV1xV411R7i5💻 CS231n: 深度学习计算机视觉(2017&#xf…

冒泡排序-BubbleSort

1、基本思路 从数组的左边开始,比较两个元素的大小,当左边大于右边时,更换左右元素位置,否则不改变;接着向右移动一步,比较第二个元素和第三个元素的大小,重复上述操作,直到最后一个…

chapter12-实战成绩通知短信系统(下)

注意!成绩短息通知服务的源码共分为两种:第一种为线性的程序,逻辑简单,但是格式杂乱;第二种为以类作为基础,封装了各种函数,逻辑较为复杂,但是格式清晰。建议新手先学习第一种代码风…

2. SpringBoot3 实战之用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

优化算法--李沐

目录 1.1梯度下降 1.2随机梯度下降 1.3小批量随机梯度下降 1.4冲量法 1.5 Adam 损失值也就是预测值与真实值之间的差值是f(x),x是所有超参数组成的一条向量,c是可以限制的,比如说权重大于等于0。 使用迭代优化算法求解一般只能保证找到局…

web开发学习笔记(12.mysql数据库进阶)

1.多表查询 2.内连接 3.外连接,分为左外连接和右外连接 左外连接完全包含左表的数据和两个表的交集 右外连接完全包含右表的数据和两个表的交集 4.子查询,又成为嵌套查询 分为标量子查询和列子查询和行子查询 首先是标量子查询 列子查询 in, not in…

sqlilabs第六十一六十二关

Less-61(GET - challenge - Double Query- 5 queries allowed -Variation 4) 手工注入 报错注入 Less-62(GET - challenge - Bilnd- 130 queries allowed -Variation 1) 手工注入 过于复杂简单写写 这个应该是用不了只能用延时 自动注入 写个脚本就可以

Mysql-全局锁、表锁、行锁

本文已收录于专栏 《数据库》 目录 全局锁概述说明开启方式应用场景 表锁概念说明实现方式意向锁 开启方式 行锁概念说明实现方式记录锁:间隙锁临键锁 总结提升 全局锁 概述说明 全局锁是是对整个数据库实例加锁,加锁后整个实例就处于只读状态&#xff…

bat批处理基础教学

bat批处理基础教学 titleset命令模式-算数运算重定向运算多命令运算| 管道符--左边的结果作为右边的输入接受外部参数 -%1注释 rem命令公共介绍- /?时间命令 date time启动 start调用其他bat文件 call计划任务查看环境变量 settelnet是远程端口命令,不加密判断ifpause>null…

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的,是同一个作用,但是有两个不同写法。 用法一: //注意:这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二: watch:{xxx:(newVal,oldVal)>…

66 C++对象模型探索。C++编译器在什么时候给我们创建默认的构造函数?

一 前提,关于C编译器给我们生成 默认构造函数 的错误认知 传统知识认为:如果在一个类中,我们没有定义任何的构造函数,那么编译器会为我们隐式自动定义一个默认的构造函数,我们称这种构造函数为 "合成的默认构造函…

ElasticSearch 7.x现网运行问题汇集3

问题描述 某现网ElasticSearch 故障,很长时间unassgined_shards的数量都不减少。 原因分析与解决方案: 先了解整体状态,使用Postman请求,如下几个请求命令: GET /_cat/indicesGET /_cat/shardsGET /_cluster/health…

Minio搭建和使用

目前可用于文件存储的网络服务选择也有不少,比如阿里云OSS、七牛云、腾讯云等等,可是收费都有点小贵。为了节约成本,很多公司使用MinIO做为文件服务器。 MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现…

Conmi的正确答案——使用eclipse进行ESP32C3的debug

eclipse IDE 版本:2023-12 1、安装debug环境 参考大神的教程:【图文】手把手教你使用 Eclipse IDE 开发 ESP32 (这里是为了我下次回来速通才写的部分) 1.1、安装插件(plug-in,新的软件已经写成software了…

Docker安装启动、常用命令、应用部署、迁移备份、Dockerfile、Docker私有仓库

目录 1.Docker安装与启动 1.1 安装Docker 1.2 设置ustc的镜像 1.3 Docker的启动与停止 2.常用命令 2.1 镜像相关命令 2.1.1 查看镜像 2.1.2 搜索镜像 2.1.3 拉取镜像 2.1.4 删除镜像 2.2 容器相关命令 2.2.1 查看容器 2.2.2 创建与启动容器 2.2.3 停止与启动容器 2.…

仿真机器人-深度学习CV和激光雷达感知(项目2)day5【作业1与答案1】

文章目录 前言作业1答案1 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容 🌟 预置知识…