`
yanchencheng
  • 浏览: 21229 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
优化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外部的操作,这一理解是相当重要的。

  • 分享到:
    评论

    相关推荐

      Oracle asp.net 简单实例

      1. 配置Oracle客户端:确保你的开发环境已安装Oracle数据提供程序(ODP.NET)以支持与Oracle数据库的通信。 2. 数据库连接字符串:创建连接Oracle数据库所需的连接字符串,包括服务器名称、端口号、服务名、用户名和...

      .net +oracle框架

      10. **部署与维护**: 部署.NET应用和Oracle客户端组件需要考虑版本兼容性、依赖关系和配置。同时,定期的数据库维护任务如备份、恢复、性能监控和调优也是保证系统稳定运行的重要环节。 综上所述,".NET +Oracle...

      Pro ODP.NET for Oracle Database 11g

      总的来说,《Pro ODP.NET for Oracle Database 11g》这本书详细介绍了如何使用ODP.NET开发高效、可靠的Oracle数据库应用,涵盖了从基础的数据库连接到复杂的PL/SQL调用、事务管理和性能优化等多个方面,对于.NET...

      Oracle Providers for ASP.NET

      ### Oracle Providers for ASP.NET:11g Release 1 (11.1.0.6.20) 开发者指南 #### 概述 《Oracle Providers for ASP.NET》开发者指南是一本详细介绍如何在ASP.NET环境中集成和使用Oracle数据库的技术手册。此版本...

      Oracle11.2.0.3 .net免客户端连接

      在这个版本中,Oracle针对.NET开发者推出了一种无需安装客户端即可连接数据库的技术,这对于开发和部署环境来说,极大地简化了配置流程,降低了系统的维护成本。 首先,Oracle Data Provider for .NET (ODP.NET) 是...

      Oracle Data Provider for .NET, Managed Driver for ODAC 12c Release 4

      在Oracle Data Provider for .NET, Managed Driver for ODAC的支持下,Entity Framework可以与Oracle数据库无缝集成,实现数据的增删改查、事务处理、查询优化等功能。 该驱动程序支持x86和x64两种架构,这意味着它...

      VB.NET连接ORACLE数据库

      Oracle.ManagedDataAccess提供了`OracleTransaction`对象用于处理事务,`OracleException`类用于捕获并处理错误,以及自动连接管理以优化性能。 文件"ConnOracleExample"可能是包含上述概念的示例代码,你可以参考...

      asp.net连接oracle说明

      在ASP.NET中连接Oracle数据库可能会遇到一些问题,特别是当系统提示“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”时,这通常是由于.NET应用程序与Oracle客户端版本不兼容导致的。...

      ADO.NET EF+Oracle的WEB服务器配置

      4. **Oracle客户端简化配置**:这里提到的简化配置避免了安装完整的Oracle客户端,只需设置环境变量`TNS_ADMIN`指向tnsnames.ora文件的位置,以及在Path变量中添加`instantclient`目录。tnsnames.ora文件是Oracle的...

      C#/.Net连接Oracle配置方式文档

      ### C#/.Net连接Oracle配置方式详解 #### 一、引言 在.NET框架中,开发者经常需要处理与Oracle数据库的交互。为了实现这一目标,.NET提供了多种连接Oracle数据库的方式,包括`System.Data.OracleClient`、`Oracle....

      asp.net+oracle 分页

      在.NET开发环境中,ASP.NET与Oracle数据库的结合是常见的企业级应用组合。本文将深入探讨如何在VS2008中使用ASP.NET实现与Oracle数据库的分页功能,以提高Web应用程序的性能和用户体验。 首先,理解分页的概念至关...

      .net 程序链接Oracle数据库Demo

      在.NET编程环境中,Oracle数据库是常用的后端存储系统之一,为开发者提供了丰富的功能和高性能的数据管理。本Demo主要展示了如何使用.NET技术与Oracle数据库进行交互,实现数据的增删查改操作。以下将详细介绍相关...

      Oracle Data Provider for .NET 开发人员指南 10g 第 2 版 (10.2.0.2)

      Oracle Data Provider for .NET(ODP.NET)是Oracle公司为.NET开发者提供的一个全面的数据访问组件,它使得在.NET环境中操作Oracle数据库变得简单高效。10g 第 2 版 (10.2.0.2) 是这个组件的一个重要版本,提供了对...

      ODP.NET (Oracle帮助文档)

      1. **高性能**:ODP.NET通过利用Oracle数据库的高级特性(如连接合并、分区和并行查询)来优化性能。 2. **类型映射**:提供强大的类型映射支持,确保.NET数据类型与Oracle数据类型的准确转换。 3. **无缝集成**:与...

      ASP.NET Oracle连接字符串

      ### ASP.NET Oracle连接字符串详解 在开发基于ASP.NET的应用程序时,经常需要与Oracle数据库进行交互。为了确保数据能够正确地被读取、写入,一个正确的连接字符串至关重要。本文将详细探讨如何设置一个适用于ASP...

      Spring.NET实用技巧2——NHibernate访问Oracle

      在本文中,我们将深入探讨如何在Spring.NET框架中利用NHibernate高效地访问Oracle数据库。Spring.NET是一个开源的.NET框架,它提供了依赖注入、面向切面编程(AOP)以及企业级服务,而NHibernate则是一个强大的对象...

      基于.NET的oracle数据库访问程序

      本项目"基于.NET的Oracle数据库访问程序"利用C#实现了对Oracle数据库的全面操作,包括查询、修改、删除和插入数据。Oracle数据库是企业级的关系型数据库管理系统,广泛应用于大型企业和组织。 1. **C#语言基础**: ...

      Oracle Database 2 Day + .NET Developer’s Guide 11g Release 2 (11

      2. **安装和配置**: 指南会详细介绍如何在开发环境中安装和配置ODP.NET,包括设置Oracle客户端、注册Oracle数据提供者以及配置数据源。 3. **连接管理**: 学习如何创建和管理数据库连接,使用ConnectionString属性...

    Global site tag (gtag.js) - Google Analytics