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

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

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

相关文章

HTML+CSS:3D轮播卡片

效果演示 实现了一个3D翻转的卡片动画&#xff0c;其中每个卡片都有不同的图片和不同的旋转角度。整个动画循环播放&#xff0c;无限次。整个页面的背景是一个占据整个屏幕的背景图片&#xff0c;并且页面内容被隐藏在背景图片之下。 Code <div class"container"…

redis 入门及相关知识汇总

什么是 Redis &#xff1f; 1&#xff0c;相对于mysql &#xff0c;oracle &#xff0c; 这种关系西数据库&#xff0c; 我们还有非关系数据库服务&#xff0c;他的产生是为了&#xff0c;解决常规数据库的并发能力&#xff0c;传统的关系型数据库受限于IO 和性能瓶颈&#xff…

【解决方法】pdf密码忘了怎么办?

PDF文件可以加密&#xff0c;大家都不陌生&#xff0c;并且大家应该也都知道PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密&#xff1f; PDF和offi…

父子组件通信$emit

文章目录 $emit 是vue中用于在子组件向父组件传递消息的一种机制。通过 $emit&#xff0c;子组件可以触发一个自定义事件&#xff0c;并向父组件传递数据。 例如&#xff1a; 以下是使用 $emit 的详细步骤&#xff1a; 1、子组件中触发自定义事件&#xff1a; <!-- ChildCom…

异步编程(JS)

前言 想要学习Promise&#xff0c;我们首先要了解异步编程、回调函数、回调地狱三方面知识&#xff1a; 异步编程 异步编程技术使你的程序可以在执行一个可能长期运行的任务的同时继续对其他事件做出反应而不必等待任务完成。 与此同时&#xff0c;你的程序也将在任务完成后显示…

微服务Spring Cloud架构详解

"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开…

jupyter notebook删除kernel & conda 删除虚拟环境

jupyter kernelspec list #列出jupyter的所有kernel jupyter kernelspec remove kernel_name #删除特定的kerneljupyter kernelspec list 命令可以在任何激活的环境中运行&#xff0c;无论是 base 环境还是某个虚拟环境。该命令将列出所有已注册的 Jupyter 内核&#xff0c;包括…

技术变革与裁员潮下程序员的挑战与应对策略

引言 一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。在技术变革下,裁员对于程序员的影响到底有多大? 技术变革的影响 在当今科技日新月异的时代,技术变革正以前所未有的速度颠覆各行各业。新兴技术如人工智能、云计算、大数据、区块链等不断涌现,对软件工…

Flowable_dmn决策引擎应用

Flowable官方文档 https://www.flowable.com/open-source/docs/dmn/ch02-Configuration 对flowable的bpmn和dmn应用都比较熟悉&#xff0c;前后应用了好几年&#xff0c;年终总结需要这部分&#xff0c;文档就写一下分享给大家&#xff0c;搭建和资源下载参考&#xff1a; flo…

Linux|centos操作系统|USB设备的驱动如何寻找和USB设置的自动挂载,卸载(备忘)

仅做一个记录&#xff0c;Linux命令实在太多了&#xff0c;有些比较有趣的命令还是需要记录一下哈 1&#xff0c; usb-devices命令 该命令会打印输出现有机器上所有的USB设备&#xff0c;此命令等同于cat /sys/kernel/debug/usb/devices 其中部分输出如下&#xff1a; T: …

怎么提升数据分析能力?——功法篇(下)

先来复习一下上篇提到的3个疑问&#xff1a; 为什么我做出来的分析总觉得没有别人的那么高级&#xff1f; 老板为什么总说我的分析“太浅了”&#xff1f; 数据分析师每天的工作就是取数做需求&#xff1f; 看完上篇讲的金字塔原理&#xff0c;如果你还有疑问&#xff0c;不妨再…

【江科大】STM32:TIM输入捕获(理论部分)

文章目录 IC&#xff08;Input Capture&#xff09;输入捕获PWM频率 知识点补充1. 滤波器的工作原理&#xff1a;2. 边沿检测器&#xff1a;自动化清零CNT输入捕获的基本结构PWMI基本结构滤波器和分频器的区别误差分析pwm.cmain.cIC.c PWM模式测频率和占空比 IC&#xff08;Inp…

手机备忘录设置提醒后不通知怎么办 解决方法来了

在这个快节奏的时代&#xff0c;我们每个人都像是旋转的陀螺&#xff0c;总有无数的事项需要记录。手机备忘录&#xff0c;无疑成为了我们的得力助手。它轻便、简单&#xff0c;随时随地都能捕捉那些一闪而过的灵感和任务。 然而&#xff0c;有时我们会遇到这样的困扰&#xf…

部署开源的团队协作工具

简介 Zulip 是一个开源的团队协作工具&#xff0c;拥有独特的基于主题的线程功能&#xff0c;结合了电子邮件和聊天的优点&#xff0c;使远程工作更加高效和愉快。它是唯一设计用于实时和异步对话的现代团队聊天应用程序。其核心优势包括&#xff1a; 适用于大型企业、领先的开…

CSS的浮动(float)布局效果

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>浮动(float)布局效果</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } /*.box1{ width: 300px; height: 300px; background-colo…

react后端开发:如何根据特定ID创建新的用户信息?

以音乐app开发为例&#xff0c;我们想要在想要创建新的唱片库&#xff0c;就需要使用Post连接服务器端新建唱片ID&#xff0c;并在该ID处插入唱片信息。怎么做呢&#xff1f; 使用create同时创建id和唱片信息 existingAlbum await Album.create({ _id: albumId, ...albumDat…

Django入门,十分钟学会登录网页

我们假定你已经阅读了 安装 Django。你能知道 Django 已被安装&#xff0c;且安装的是哪个版本&#xff0c;通过在命令提示行输入命令 cmd黑窗口运行&#xff0c;不懂cmd百度一下 python -m django --version 如果没出现版本&#xff0c;就是没安装&#xff0c;那么用pip安装…

《WebKit 技术内幕》学习之十(2): 插件与JavaScript扩展

2 Chromium PPAPI插件 2.1 原理 插件其实是一种统称&#xff0c;表示一些动态库&#xff0c;这些动态库根据定义的一些标准接口可以跟浏览器进行交互&#xff0c;至于这个标准接口是什么都可以&#xff0c;重要的是大家都遵循它们&#xff0c;NPAPI接口标准只是其中的一种&a…

C语言第六弹---分支语句(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 分支语句 1、 逻辑操作符&#xff1a;&& , || , &#xff01;4.1、 逻辑取反运算符 &#xff01;4.2、 与运算符4.3、 或运算符4.4、 练习&#xff1a;闰…

vue3.0规范学习记录

组合式函数使用usename进行命名&#xff0c;例如useMouse&#xff1b; 自定义指令使用v name进行命名&#xff0c;例如vFocus&#xff1b; 在组件使用v-model实现“双向绑定”时&#xff0c;子组件默认通过emits(‘update:modelValue’, params)触发更新&#xff1b; setup…