优化Oracle .Net配置

优化Oracle .Net配置

原帖地址:http://www.builder.com.cn/2003/1230/104447.shtml

作者: ZDNet China
2003-12-30 14:46:52


本文译自Builder.com,未经许可请勿转载

由于Oracle数据库通常需要在不同地方被访问,所以Oracle开发人员必须搞清楚数据库性能如何被网络通讯所影响。由Oracle提供的TNS(Transparent Network Substrate)允许不同数据库之间的分布式通讯。

作为一种分布式协议的TNS,允许远距离的系统之间的透明数据库通讯。TNS成为Oracle逻辑数据请求与远距离服务器的物理通讯之间的“绝缘体(insulator)”。由此,网络管理人员可以控制很多方面的网络性能优化,这样,Oracle管理人员就极少获得影响整个数据库性能(图A)的网络设置的控制权。

你可以通过使用一些关键设置来提高分布式处理的性能,这篇文章讨论了一些重要的设置。与分布式通讯相关的init.ora参数,比如tcp.nodelay,能够用于改变Oracle数据库中的信息包传输(packet-shipping)的机制。

本文中我也讨论了sqlnet.ora, tnsnames.oraprotocol.ora文件中的参数。你可以使用这些方法来改变TCP信息包的配置和大小,改变之后的信息包能够对网络透明层产生重要影响,以达到提高整个Oracle交流的目的。

Oracle NET不能允许Oracle管理人员优化Oracle网络参数以提高网络性能。事实上,绝大部分网络通讯都无法在Oracle环境中得到优化。Oracle *Net是位于特定网络协议栈的OSI模型中的一个层。

为了响应一个数据请求,Oracle *Net 获得数据并传递到协议栈。协议栈然后从这一数据建立一个信息包并传递到网络。Oracle *Net的作用是将数据传送到协议栈。

然而,DBA能够控制网络信息包的频率和大小。在Oracle中存在着丰富的可以更改信息包频率和大小的工具。一个简单的例子就是以更低的频率改变传送更大数量快照的时间间隔。

可以使用不同参数来优化不同服务器之间的Oracle *Net。请记住,网络优化是Oracle范围之外的操作,一个合格的网络管理人员应该经得起各种询问。使用一些设置可以影响网络信息包传送的频率和大小,这些设置包含在以下的参数文件。

  • protocol.ora文件—tcp.nodelay
  • sqlnet.oraserver 文件—automatic_ipc
  • sqlnet.oraclient 文件—break_poll_skip
  • tnsnames.ora文件—SDU, TDU
  • listener.ora文件—SDU, TDU, 以及queuesize

这些优化参数只影响Oracle *Net层的性能。现在让我们仔细地查看这些参数,以及这些参数如何被调整以提高Oracle *Net。

protocol.ora中的tcp.nodelay参数

在缺省的情况下,Oracle *Net在传送数据之前一直等待,直到缓冲区填满。所以请求一般不会立即发送它们的目的地。当大量数据从一端流往另一端时候,这种情况很常见。添加一个protocol.ora文件,然后指定一个tcp.nodelay停止缓冲溢出延迟,都可以解决这一问题。

protocol.ora文件可以被指定以显示所有TCP/IP执行中的数据。这一参数可用于服务端和客户端。protocol.ora声明为:

tcp.nodelay = yes

指定这一参数使得TCP缓冲被跳过,以致可以立即发送每一个请求。然而请注意,网络通讯量会增大,因为更小的,更快的信息包被传递,所以会导致网络速度的减慢。

tcp.nodelay参数只有在TCP超时产生的时候才被使用。设置tcp.nodelay可以提高数据库服务器之间的大量数据通讯的性能。

sqlnet.ora中的automatic_ipc参数

automatic_ipc参数忽略了网络层,所以加快了数据库的逻辑连接。当automatic_ipc=on,Oracle *Net查看当地数据库是否定义以相同的名称,如果是,网络层将被忽略,因为此时的连接被直接转译为当地的IPC连接。这对于数据库服务器是有用的,但对于Oracle *Net客户端是没有什么用处。

只有当一个Oracle *Net连接于当地数据库的时候,automatic_ipc参数才有可能使用在数据库服务器上。如果不需要当地连接,将这一参数设置为off,由此可以提高所有Oracle *Net客户端的性能。

tnsnames.ora和listener.ora中的SDU和TDU参数

SDU(session data unit)和TDU(transport date unit)都位于tnsnames.ora and listener.ora文件中。SDU指定信息包的大小以传送到网络。在理想情况下,SDU不会超过MTU(maximum transmission unit)的大小。MTU是一个固定值,它取决于使用的实际网络操作。Oracle建议SDU设置相同于MTU。

 


注意

在7.3.3之前,SDU和TDU都固定于2K而且不能改变。


TDU是使用于Oracle *Net分组数据的缺省信息包。在理想情况下,TDU参数应该是SDU参数的倍数。SDU和TDU的缺省值为2,048,最大值都为32,767字节。

以下的规则适用于SDU和TDU:

  • 设置的SDU值不能大于TDU,否则会浪费网络资源。

     

  • 如果你的用户通过dial-up modem线来连接数据库,你应该将SDU和TDU设置为比较小的值,因为频繁的数据发送会有可能超过Modem传送的能力。

     

  • 对于快速的网络连接(T1或T3线),你应该将SDU和TDU设置为相同于MTU。在标准的以太网,缺省的MTU大小设置为1,514字节。对于记号环网络,缺省的MTU大小为4,202字节。

     

  • 如果使用一个多线程服务器(MTS),你必须使用正确的MTU TDU配置设置mts_dispatchers

     

     

    表A为一个记号环网络中这些参数使用的范例,其中MTU值为4,202。

     

    SDU和TDU设置是影响不同主机之间的连接速度。对于快速T1线,设置SDU=TDU=MTU。对于比较慢的Modem线,应该设置为比较小的SDU和TDU值。

    自从Oracle8i以来,数据库将自动注册listener.ora文件中的实例,除非你执行以下操作中的某一个:

  • 无效化自动服务注册。所以,你必须将init.ora参数设置为local_listener,以使用一个TCP口。

     

  • init.ora文件中执行MTS和定义mts_dispatchers,如下:MTS_DISPATCHERS="(DESCRIPTION=(SDU=8192)(TDU=8192)
    ADDRESS=(PARTIAL=TRUE)(PROTOCOL=TCP)(HOST=supsund3)))
                        (DISPATCHERS=1)"

     

  • tnsnames.ora文件中的Connect_Data部分使用service_name=global_dbname,在这一文件中global_dbname设置为listener.ora注意到这一设置将使TAF(Transparent Application Failover)无效化。对于更多的细节,请参考Oracle*Net 管理人员向导中的"配置TAF(Transparent Application Failover)"

     

    listener.ora中的queuesize参数

    当Oracle建立一个连接时,存储的请求数量取决于非文档的queuesize参数。这一参数只使用于大型数据量的数据库。所期望的连接最大量与queuesize参数的大小相同。这里是listener.ora文件中这一参数使用的范例:

       LISTENER =
         (ADDRESS_LIST =
               (ADDRESS =
                 (PROTOCOL = TCP)
                 (HOST = marvin)
                 (PORT = 1521)
                 (QUEUESIZE = 32)
               )
         )


    这一参数的缺点是它为预先的请求预先分配资源,所以使用更多的内存和资源。当传送的数据量过大的时候,你可以考虑到使用MTS方法。同时注意到UNIX的某些版本不允许超过5的队列,对于MTS队列大小也有严格的限制。

    sqlnet.ora中的break_poll_skip参数

    只用于客户端的sqlnet.ora参数代表着要忽略的信息包的个数。这一参数影响着CPU资源。在缺省的情况下这一参数的值为4,采用以下方式可以改变这一参数值:

  • break_poll_skip值越大,检测CTRL-C的频率越少,CPU消耗就超少。

     

  • 相反的,break_poll_skip值越小,检测CTRL-C的频率越高,CPU消耗就超大。

     

    外部网络优化

    在这一网络相关的参数设置的简短讨论中,我为你提供的是对网络优化的复杂性的理解。Oracle *Net只是特定网络协议栈的OSI模型中的一个简单的层,所以所有的网络优化都是Oracle外部的操作,这一理解是相当重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值