重印 : 优化oracle的网络性能

本章介绍如何优化连接性能. 本章包含以下主题:

配置会话数据单元

在典型的数据库配置下, Oracle Net将数据封装到缓冲区的大小中 会话数据单元 (SDU) 通过网络发送数据之前. Oracle Net在每个缓冲区填满后发送, 酡, 或当应用程序尝试读取数据时. 调整中 相对于随时提供给Oracle Net的数据发送量而言,SDU缓冲区的大小相对于可以提高性能, 网络利用率, 和内存消耗. 传输大量数据时, 增加SDU大小可以提高性能和网络吞吐量.

提供给Oracle Net的任意一次发送的数据量称为消息大小. Oracle Net默认情况下假定消息大小通常在 0 和 8192 个字节, 而且很少, 大于 8192 个字节. 如果这个假设是真的, 然后大多数时候, 使用一个SDU缓冲区发送数据.

SDU大小范围可以从 512 字节到 65535 个字节. 客户端和专用服务器的默认SDU为 8192 个字节. 共享服务器的默认SDU是 65535 个字节.

实际使用的SDU大小在连接时由客户端和服务器协商确定,并且小于客户端和服务器的值. 配置与默认大小不同的SDU大小需要在客户端和服务器计算机上都配置SDU, 除非您使用共享服务器. 对于共享服务器, 仅客户端值必须更改,因为共享服务器默认为最大值.

当主要邮件大小小于或大于时,您应该考虑更改SDU大小 8192. SDU大小应为 70 比主要邮件大小大的字节. 如果主要邮件大小加上 70 字节超过最大SDU, 那么应该设置SDU,以便将消息大小分为最少的相等部分,其中每个部分都是 70 小于SDU大小的字节. 更改默认值, 改变 DEFAULT_SDU_SIZE 中的参数 sqlnet.ora 文件.

例如, 如果应用程序发送和接收的大多数消息小于8KB, 考虑到 70 开销字节, 然后将SDU设置为8KB可能会产生良好的结果. 如果有足够的内存, 然后使用SDU的最大值可最大程度地减少系统调用次数和Oracle Net Services的开销.

注意:

从Oracle数据库开始 11G, Oracle Net Services为组件优化了批量数据传输, 例如Oracle SecureFiles LOB和Oracle Data Guard重做传输服务. SDU大小限制, 如网络参数文件中所指定, 不适用于这些批量数据传输.

设置数据库的SDU大小

设置数据库服务器的SDU大小, 配置以下文件:

  • sqlnet.ora配置 DEFAULT_SDU_SIZE 中的参数 sqlnet.ora 文件, 如下:
    DEFAULT_SDU_SIZE = 8192
    
  • 初始化参数文件如果使用共享服务器进程, 然后在 DISPATCHERS 初始化参数文件中的参数, 如下:
    调度员="(Description =(地址=(协议= tcp))(SDU = 8192))"
    
  • listener.ora如果您在监听器中配置了目标列表 listener.ora 文件, 那么SDU中的值 SID_LIST 元素会覆盖当前的设置 sqlnet.ora 使用专用服务器进程时的文件.
    SID_LIST_listener_name=
      (SID_LIST = 
        (SID_DESC =
         (SDU = 8192)
         (SID_NAME =销售)))
    

    SDU大小和为客户端配置的较小值优先.

设置客户端的SDU大小

为客户端设置SDU大小, 配置以下文件:

  • sqlnet.ora在客户端进行全局配置, 配置 DEFAULT_SDU_SIZE 中的参数 sqlnet.ora 文件, 如下:
    DEFAULT_SDU_SIZE = 8192
    
  • tnsnames.ora对于特定的连接描述符, 您可以指定 SDU 中的参数 DESCRIPTION 参数.
    sales.us.example.com =
    (Description = 
        (SDU = 11280) 
          (地址=(协议= tcp)(HOST =销售服务器)(端口= 1521))
        (CONNECT_DATA =
         (SERVICE_NAME = sales.us.example.com))
    ) 
    

SDU大小适用于特定连接描述符的所有Oracle Net协议.

确定带宽延迟乘积

带宽延迟乘积是网络带宽与数据通过网络的往返时间的乘积. 确定往返时间的简单方法, 是使用诸如 ping 从一台主机到另一台主机,并使用 ping.

例如, 如果网络的带宽为 100 Mbps和往返时间5ms, 那么发送和接收缓冲区至少应为 (100*10^ 6) * (5/10^ 3) 位或大约 62.5 千字节.

下式显示了所涉及的单位和因素之间的关系:

100,000,000 位   1 字节   5 秒
---------------- X ------ X --------- = 62,500 个字节
 1 第二          8 位     1000

设置 SEND_BUF_SIZERECV_BUF_SIZE 至少通过带宽延迟乘积来确保当发送大量数据时,网络带宽将得到最佳利用.

根据上式, 该网络链接的带宽延迟乘积约为64KB. 如果用于在主数据库和备用数据库之间传输重做数据的最大消息为1MB, 然后的值 SEND_BUF_SIZERECV_BUF_SIZE 参数可能是1MB. 然而, 如果平均消息较少, 那么设置64KB应该足以优化可用带宽的使用.

也可以看看:

有关确定邮件大小的信息, 指 “统计示例”

对于大多数网络协议, 确保 RECV_BUF_SIZE 网络连接一端的参数, 通常在客户处, 等于 SEND_BUF_SIZE另一端的参数, 通常在服务器上.

配置I / O缓冲区空间

可靠的网络协议, 如TCP / IP, 在上下层协议之间收发数据时,将数据缓冲到发送和接收缓冲区中. 这些缓冲区的大小通过影响流控制决策来影响网络性能。.

RECV_BUF_SIZESEND_BUF_SIZE 参数指定与Oracle Net连接关联的套接字缓冲区的大小. 确保数据连续流和更好地利用网络带宽, 指定会话的接收和发送操作的I / O缓冲区空间限制 RECV_BUF_SIZESEND_BUF_SIZE 参数. 的 RECV_BUF_SIZESEND_BUF_SIZE 参数值不必匹配, 但应根据您的环境进行设置.

为了获得最佳性能, 发送和接收缓冲区的大小应设置得足够大,以容纳可能在网络连接上同时发送的所有数据. 对于简单的数据库连接, 这通常会映射到 OCI_PREFETCH_MEMORY 尺寸.

请谨慎使用这些参数,因为它们会影响网络和系统性能. 这些参数的默认值是特定于操作系统的.

TCP支持这些参数, 带SSL的TCP / IP, 和SDP. 其他协议可能在某些操作系统上支持这些参数. 这些参数的建议值在安装指南中指定. 有关其他信息,请参考Oracle Net的特定于操作系统的文档。.

笔记:

  • 的实际价值 SEND_BUF_SIZERECV_BUF_SIZE 由于主机操作系统中的限制或由于内存限制,参数可能小于指定的值.
  • 重要的是要考虑系统必须支持的并发连接总数以及可用的内存资源. 这些连接消耗的内存总量取决于并发连接的数量及其各自缓冲区的大小。.

也可以看看:

《 Oracle Call Interface程序员指南》 有关的其他信息 OCI_PREFETCH_MEMORY 参数

在客户端上配置I / O缓冲区空间

配置客户端, 在指定文件的以下位置设置缓冲区空间大小:

  • 仅设置 RECV_BUF_SIZE 参数通常足够. 如果客户端发送大量请求, 然后还设置 SEND_BUF_SIZE 参数. 这些参数是在客户的 sqlnet.ora 文件.
  • 对于特定的连接描述符, 您可以覆盖客户端中的当前设置 sqlnet.ora 文件. 您可以在特定的协议地址或说明中指定缓冲区空间参数 tnsnames.ora 类似于以下文件:
    sales.us.example.com =
     (Description = 
       (ADDRESS_LIST =
         (地址=(协议= tcp)(主机= sales1服务器)(端口= 1521)
            (SEND_BUF_SIZE = 11784)
            (RECV_BUF_SIZE = 11784))
         (地址=(协议= tcp)(主机= sales2服务器)(端口= 1521)
            (SEND_BUF_SIZE = 11784)
            (RECV_BUF_SIZE = 11784))
       (CONNECT_DATA =
         (SERVICE_NAME = sales.us.example.com)))
    hr.us.example.com =
     (Description = 
       (SEND_BUF_SIZE = 8192)
       (RECV_BUF_SIZE = 8192)
         (地址=(协议= tcp)(主机= hr1服务器)(端口= 1521))
       (CONNECT_DATA =
         (SERVICE_NAME = hr.us.example.com)))
    

在服务器上配置I / O缓冲区大小

因为数据库服务器将数据写入客户端, 设置 SEND_BUF_SIZE 服务器端的参数通常就足够了. 如果数据库服务器正在接收大量请求, 然后还设置 RECV_BUF_SIZE 参数。配置数据库服务器, 在中设置缓冲区空间大小 listener.orasqlnet.ora 档案.

在里面 listener.ora 文件, 指定特定协议地址或描述的缓冲区空间参数. 以下是设置示例:

LISTENER =
(Description =
(地址=(协议= tcp)(HOST =销售服务器)(端口= 1521)
(SEND_BUF_SIZE = 11784)
(RECV_BUF_SIZE = 11784))
(地址=(协议= ipc)(KEY = extproc)
(SEND_BUF_SIZE = 11784)
(RECV_BUF_SIZE = 11784)))
LISTENER2 =
(Description =
(SEND_BUF_SIZE = 8192)
(RECV_BUF_SIZE = 16384)
(地址=(协议= tcp)(HOST =销售服务器)(端口= 1521)))

以下是示例中的设置 sqlnet.ora 文件:

RECV_BUF_SIZE=65536
SEND_BUF_SIZE=65536

设置共享服务器进程的缓冲区大小参数

如果使用共享服务器进程, 那么您可以覆盖从服务器获得的当前设置 sqlnet.ora 通过在 DISPATCHERS初始化参数如下:

调度员="(地址=(协议= tcp)(SEND_BUF_SIZE = 65536))"

为InfiniBand连接配置SDP支持

Oracle Net Services提供对套接字直接协议的支持 (SDP) 用于InfiniBand高速网络.

SDP是用于群集服务器环境的标准通信协议. SDP是网络接口卡和应用程序之间的接口. 通过使用SDP, 应用程序将大部分消息传递负担放在网络接口卡上, 为其他任务释放CPU. 结果是, SDP减少网络 潜伏 和CPU利用率.

SDP专为系统区域网设计 (不带). SAN具有短距离的特点, 多个服务器系统之间的高性能通信, 一台交换机上集群的Oracle Application Server或任何其他第三方中间层客户端和数据库服务器.

注意:

请与您的单个供应商联系,以了解它们与Oracle数据库的版本兼容性 11G.请访问Oracle技术网,以获取有关SDP支持的其他信息,网址为:

http://otn.oracle.com/membership

以下各节描述了如何为中间层和数据库服务器通信设置对SDP的Oracle Net支持. 它包含以下主题:

也可以看看:

“了解绩效” 有关支持的部署的概述

使用SDP的先决条件

在配置对SDP的支持之前, 安装所需的硬件, 并设置与OpenFabrics Enterprise Distribution兼容的InfiniBand硬件和软件 (OFED) 1.4 来自应用程序Web服务器和数据库服务器上的指定供应商.

在安装InfiniBand软件期间, 标识定义系统的SDP或地址族的常量. 可以从操作系统或OFED文档中获取.

也可以看看:

供应商文档以获取安装信息.

在服务器上配置SDP

配置数据库服务器, 在中配置SDP地址 listener.ora 数据库服务器上的文件.

注意:

如果SDP或地址协议族常量不是 27, Net Net服务的默认值, 然后在 SDP.PF_INET_SDP 中的参数 sqlnet.ora 文件.

以下示例显示使用端口号的SDP端点 1521 在计算机上的 sales-server.

李斯特=
  (Description =
    (ADDRESS_LIST =
      (地址=(协议= sdp)(HOST =销售服务器)(端口= 1521))
      (地址=(协议= tcp)(HOST =销售服务器)(端口= 1521))
      (地址=(协议= ipc)(KEY = extproc))))

在客户端上配置SDP

注意:

如果SDP或地址协议族常量不是 27, Net Net服务的默认值, 然后在 SDP.PF_INET_SDP 中的参数 sqlnet.ora 文件.

以下过程描述了如何配置Oracle Application Server服务器或第三方中间层客户端:

  1. 如果配置第三方中间层客户端, 然后升级客户端以使用Oracle数据库 11G 客户端软件, 如下:
    1. 运行Oracle Universal Installer.
    2. 选择 甲骨文数据库 11G 客户 从可用产品页面.
  2. 对于Oracle Application Server服务器和第三方中间层客户端, 创建一个网络服务名称以连接到数据库服务器:
    • 对于Oracle Application Server服务器, 指定一个网络服务名称,该名称使用在服务器中配置的相同TCP / IP协议地址 tnsnames.ora 文件. 例如:
      销售=
       (Description =
         (地址=(协议= tcp)(HOST =销售服务器)))
         (CONNECT_DATA =
           (SERVICE_NAME = sales.us.example.com)))
      
    • 对于第三方中间层客户, 指定一个网络服务名称,该名称使用在 tnsnames.ora 文件。例如:
      销售=
       (Description =
         (地址=(协议= sdp)(HOST =销售服务器)))
         (CONNECT_DATA =
           (SERVICE_NAME = sales.us.example.com)))
      

      也可以看看:

      章节 8, “配置命名方法” 有关创建连接描述符的更多信息

通过未授权限制资源消耗 用户数

未经授权访问监听器或数据库服务器可能导致 拒绝服务攻击, 从而未经授权的客户端试图阻止授权的用户’ 需要时可以访问和使用系统的能力. 恶意客户端可能企图用连接请求充斥侦听器或数据库服务器,而连接请求的唯一目的是消耗资源, 如连接, 流程, 或线程. 减轻这些类型的攻击, 配置限制以限制在身份验证之前可以保留资源的时间. 客户端尝试超出配置的限制会导致连接终止和包含要记录的客户端IP地址的审核跟踪.

限制未授权用户的资源消耗并启用审核跟踪, 设置参数中描述的时限值 表 14-1.

表 14-1 连接超时参数

参数 文件 描述
INBOUND_CONNECT_TIMEOUT_listener_name listener.ora 时间, 片刻之间, 如果客户端在指定的时间内没有收到客户端请求,则在建立网络连接后,客户端将完成向监听器的连接请求, 然后终止连接. 此外, 侦听器记录客户端的IP地址和一个 ORA-12525: TNS:侦听器未在允许的时间内收到客户的请求 错误消息 listener.log文件.
SQLNET.INBOUND_CONNECT_TIMEOUT 数据库服务器上的sqlnet.ora 时间, 片刻之间, 客户端连接数据库服务器并提供必要的身份验证信息。如果客户端未能在指定的时间内建立连接并完成身份验证, 然后数据库服务器终止连接. 此外, 数据库服务器记录客户端的IP地址和一个 ORA-12170: TNS:发生连接超时 错误消息 sqlnet.log文件. 客户收到 ORA-12547: TNS:lost contactORA-12637: 数据包接收失败错误消息.

为这些参数指定值时, 考虑以下建议:

  • 将两个参数都设置为初始低值.
  • 设置值 INBOUND_CONNECT_TIMEOUT_listener_name 参数的值小于 SQLNET.INBOUND_CONNECT_TIMEOUT 参数.

例如, 你可以设置 INBOUND_CONNECT_TIMEOUT_listener_name 至 10 秒和 SQLNET.INBOUND_CONNECT_TIMEOUT 参数 50 秒. 如果客户端由于特定环境正常的系统或网络延迟而无法在指定的时间内完成连接, 然后根据需要增加时间.

也可以看看:

 

原始网址: https://docs.oracle.com/cd/E18283_01/network.112/e10836/performance.htm

发表评论