TNS服务器被看作Oracle的逻辑数据请求中的绝缘体和远程服务器间的服务器。同样的,网络管理员有能力控制网络性能调谐性,但是Oracle管理员没有控制影响数据库性能的网络设置的权利。
可以利用下面我所说的重要的设置来改变分布式事物元的性能。其中包括了sqlnet.ora, tnsnames.ora, 和 protocol.ora文件中的参数,这些参数可以被用做改变设置和TCP包的大小,并且调整这些参数可以影响根本的网络传输层以便改变Oracle事物元的吞吐量。
正如刚才所说,Oracle网不允许Oracle专业人员调整根本的网络传输层,并且大多数的网络流量不能在Oracle环境中被改变。记住,Oracle网络是一个在OSI模型中的网络层,这个网络层存在于网络协议栈上。
但是,网络信息包的频率和大小可以被Oracle DBA来控制。Oracle有大量的工具来改变信息包的频率和大小。
在服务器间的Oracle网络连接可以用几个参数来调谐。但是,你一定要记住,网络的调谐一定要在Oracle的外面并且一个有资格的网络管理员必须有在被商议后才可以调谐网络。信息包的频率和大小可以受到下面参数文件的设置的影响。
?sqlnet.ora服务器文件――automatic_ipc参数
?sqlnet.ora 客户文件―break_poll_skip 参数
?tnsnames.ora 和 listener.ora 文件―SDU 和 TDU 参数
?protocol.ora 文件―tcp.nodelay 参数
这些调谐参数仅仅影响Oracle网络层的性能。让我们来详细的解释一下它们并看看它们怎么被调整用来改变Oracle网络吞吐量。
在传输数据之前Oracle网络默认等待直到缓冲器被填满。因此,需求不能被立即送到它们的目的地。当大量的数据从一个地方送到另外一个地方的时候这个是最普通的了。Oracle网络不能传送信息包直到缓冲器满了。添加一个protocol.ora 文件和指定一个tcp.nodelay 停止缓冲器的延迟可以修补这个缺陷。
protocol.ora文件可以被指定用来说明所有TCP/IP实现的无数据缓冲。这个参数可以被用在客户和服务器端。protocol.ora语句是这样的:
tcp.nodelay = yes
指定这个参数可以使TCP缓冲器被跳过这样每个请求就可以很快的被送到。但是请记住,由于更小和更频繁的信息包的传送导致网络流量的增加,这样就会降低网络的速度。
tcp.nodelay
tcp.nodelay参数仅仅在TCP遭遇超时设定的时候被使用。当在数据库服务器之间有大量的流量时设置tcp.nodelay可以导致在性能上巨大的改变。
sqlnet.ora文件中的automatic_ip参数
automatic_ipc参数迂回于网络层,所以它可以给本地连接到数据库加速。当automatic_ipc=on的时候,Oracle网络会检查本地数据库是否被定义成相同的别,如果有,当连接被直接转化成本地ICP连接的时候网络层被回避。这个在数据库服务器上是非常有用的,但是对于Oracle网络用户来说这个一点用都没有。
当Oracle网络连接必须被当作本地数据库时,automatic_ipc参数仅仅应该被用在数据库服务器上。如果不需要本地连接的时候,将这个参数设置成off,通过利用这个设置,所有的Oracle网络可以可以改善其性能。
tnsnames.ora文件中的SDU和TDU
SDU和TDU参数位于tnsnames.ora 和 listener.ora文件中。SDU指定送入网络的信息包的大小,理论上,SDU不应该超过MTU最大值的大小。MTU依赖一个现实的网络实现上,它是一个不变值。SDU在Oracle中的地位和MTU一样。
在Oracle的网络中,TDU的信息包的大小是一个默认值。理想状态下,TDU参数应该被定义为SDU参数的一倍。SDU和TDU默认的值的大小是2048,最大值是32767字节。
下面是使用SDU和TDU的方针:
?SDU永远不要设置的比TDU大,因为你将浪费掉网络资源空间。
?如果你的用户是通过调制调解器来上网,你应该将SDU和TDU的值设置的小一点,因为频繁的再发送会经常发生在调制调解器的线路上。
?在宽带连接中,你应该将你的网络SDU和TDU的值和MTU的值设置得大小一样。在标准的以太网络中,默认的MTU大小是1514字节,在标准的令牌环形网中,MTU默认值大小是4202。
?如果MTS被使用,你必须利用适当的MTU,TDU设置来设置mts_dispatchers。
在主机之间,SDU和TDU设置是连接速度的直接函数。例如T1,设置SDU=TDU=MTU。对于速度慢的调制调解器来说,最好使用值较小的SDU和TDU。
listener.ora文件中的Queuesize参数
当Oracle正在建立的连接的时候,这个连接由queuesize参数来确定。这个参数仅仅被大容量的数据库使用。人们期待同时发生的连接的大小必须和queuesize参数的大小相等。这里是一个listener.org文件中的关于使用这个参数的例子:
LISTENER =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = marvin)
(PORT = 1521)
(QUEUESIZE = 32)
)
)
这个参数的一个缺点就是它会为预计的请求分配参数,因此,会使用更多的内存和资源。如果你需要使用大容量连接你就要考虑使用MTS。同时,注意一些UNIX的版本不允许使用的队列超过5,并且还有关于MTS队列大小的限制。
性能
尽管大多数信息包的流量都被调谐好了,但是正确的Oracle网络参数设置将给分布式系统的性能带来巨大影响。对于使用Oracle的专业人员来说,他们必须完全明白其性能和优化这些重要的参数。