="t18">
由于Oracle数据库通常需要在区别地方被访问
![](/icons/59800dou.gif)
所以Oracle开发人员必须搞清楚数据库性能如何被网络通讯所影响
![](/icons/59800dou2.gif)
由Oracle提供
![](/icons/59800de.gif)
TNS(Transparent Network Substrate)答应区别数据库的间
![](/icons/59800de.gif)
分布式通讯
![](/icons/59800dou2.gif)
作为
![](/icons/59800yi.gif)
种分布式协议
![](/icons/59800de.gif)
TNS
![](/icons/59800dou.gif)
答应远距离
![](/icons/59800de.gif)
系统的间
![](/icons/59800de.gif)
透明数据库通讯
![](/icons/59800dou2.gif)
TNS成为Oracle逻辑数据请求和远距离服务器
![](/icons/59800de.gif)
物理通讯的间
![](/icons/59800de.gif)
“绝缘体(insulator)”
![](/icons/59800dou2.gif)
由此
![](/icons/59800dou.gif)
网络治理人员可以控制很多方面
![](/icons/59800de.gif)
网络性能优化
![](/icons/59800dou.gif)
这样
![](/icons/59800dou.gif)
Oracle治理人员就极少获得影响整个数据库性能(图A)
![](/icons/59800de.gif)
网络设置
![](/icons/59800de.gif)
控制权
![](http://www.crazycoder.cn/WebFiles/20094/a4d9d7d0-d60c-4f73-ac88-ed49e70c20e7.g<img src='/icons/59800if.gif' />)
你可以通过使用
![](/icons/59800yi.gif)
些要害设置来提高分布式处理
![](/icons/59800de.gif)
性能
![](/icons/59800dou.gif)
这篇文章讨论了
![](/icons/59800yi.gif)
些重要
![](/icons/59800de.gif)
设置
![](/icons/59800dou2.gif)
和分布式通讯相关
![](/icons/59800de.gif)
init.ora参数
![](/icons/59800dou.gif)
比如tcp.nodelay
![](/icons/59800dou.gif)
能够用于改变Oracle数据库中
![](/icons/59800de.gif)
信息包传输(packet-shipping)
![](/icons/59800de.gif)
机制
![](/icons/59800dou2.gif)
本文中我也讨论了sqlnet.ora
![](/icons/59800dou.gif)
tnsnames.ora和protocol.ora文件中
![](/icons/59800de.gif)
参数
![](/icons/59800dou2.gif)
你可以使用这些思路方法来改变TCP信息包
![](/icons/59800de.gif)
配置和大小
![](/icons/59800dou.gif)
改变的后
![](/icons/59800de.gif)
信息包能够对网络透明层产生重要影响
![](/icons/59800dou.gif)
以达到提高整个Oracle交流
![](/icons/59800de.gif)
目
![](/icons/59800de.gif)
![](/icons/59800dou2.gif)
Oracle NET不能答应Oracle治理人员优化Oracle网络参数以提高网络性能
![](/icons/59800dou2.gif)
事实上
![](/icons/59800dou.gif)
绝大部分网络通讯都无法在Oracle环境中得到优化
![](/icons/59800dou2.gif)
Oracle *Net是位于特定网络协议栈
![](/icons/59800de.gif)
OSI模型中
![](/icons/59800de.gif)
![](/icons/59800yi.gif)
个层
![](/icons/59800dou2.gif)
为了响应
![](/icons/59800yi.gif)
个数据请求
![](/icons/59800dou.gif)
Oracle *Net 获得数据并传递到协议栈
![](/icons/59800dou2.gif)
协议栈然后从这
![](/icons/59800yi.gif)
数据建立
![](/icons/59800yi.gif)
个信息包并传递到网络
![](/icons/59800dou2.gif)
Oracle *Net
![](/icons/59800de.gif)
作用是将数据传送到协议栈
![](/icons/59800dou2.gif)
然而
![](/icons/59800dou.gif)
DBA能够控制网络信息包
![](/icons/59800de.gif)
频率和大小
![](/icons/59800dou2.gif)
在Oracle中存在着丰富
![](/icons/59800de.gif)
可以更改信息包频率和大小
![](/icons/59800de.gif)
工具
![](/icons/59800dou2.gif)
![](/icons/59800yi.gif)
个简单
![](/icons/59800de.gif)
例子就是以更低
![](/icons/59800de.gif)
频率改变传送更大数量快照
![](/icons/59800de.gif)
时间间隔
![](/icons/59800dou2.gif)
可以使用区别参数来优化区别服务器的间
![](/icons/59800de.gif)
Oracle *Net.请记住
![](/icons/59800dou.gif)
网络优化是Oracle范围的外
![](/icons/59800de.gif)
操作
![](/icons/59800dou.gif)
![](/icons/59800yi.gif)
个合格
![](/icons/59800de.gif)
网络治理人员应该经得起各种询问
![](/icons/59800dou2.gif)
使用
![](/icons/59800yi.gif)
些设置可以影响网络信息包传送
![](/icons/59800de.gif)
频率和大小
![](/icons/59800dou.gif)
这些设置包含在以下
![](/icons/59800de.gif)
参数文件
![](/icons/59800dou2.gif)
protocol.ora文件—tcp.nodelay
sqlnet.oraserver 文件—automatic_ipc
sqlnet.oraclient 文件—
![](/icons/59800break.gif)
_poll_skip
tnsnames.ora文件—SDU, TDU
listener.ora文件—SDU, TDU, 以及queuesize
这些优化参数只影响Oracle *Net层
![](/icons/59800de.gif)
性能
![](/icons/59800dou2.gif)
现在让我们仔细地查看这些参数
![](/icons/59800dou.gif)
以及这些参数如何被调整以提高Oracle *Net.
在缺省
![](/icons/59800de.gif)
情况下
![](/icons/59800dou.gif)
Oracle *Net在传送数据的前
![](/icons/59800yi.gif)
直等待
![](/icons/59800dou.gif)
直到缓冲区填满
![](/icons/59800dou2.gif)
所以请求
![](/icons/59800yi.gif)
般不会立即发送它们
![](/icons/59800de.gif)
目
![](/icons/59800de.gif)
地
![](/icons/59800dou2.gif)
当大量数据从
![](/icons/59800yi.gif)
端流往另
![](/icons/59800yi.gif)
端时候
![](/icons/59800dou.gif)
这种情况很常见
![](/icons/59800dou2.gif)
添加
![](/icons/59800yi.gif)
个protocol.ora文件
![](/icons/59800dou.gif)
然后指定
![](/icons/59800yi.gif)
个tcp.nodelay停止缓冲溢出延迟
![](/icons/59800dou.gif)
都可以解决这
![](/icons/59800yi.gif)
问题
![](/icons/59800dou2.gif)
protocol.ora文件可以被指定以显示所有TCP/IP执行中
![](/icons/59800de.gif)
数据
![](/icons/59800dou2.gif)
这
![](/icons/59800yi.gif)
参数可用于服务端和客户端
![](/icons/59800dou2.gif)
protocol.ora声明为:
tcp.nodelay = yes
指定这
![](/icons/59800yi.gif)
参数使得TCP缓冲被跳过
![](/icons/59800dou.gif)
以致可以立即发送每
![](/icons/59800yi.gif)
个请求
![](/icons/59800dou2.gif)
然而请注重
![](/icons/59800dou.gif)
网络通讯量会增大
![](/icons/59800dou.gif)
![](/icons/59800yinwei.gif)
更小
![](/icons/59800de.gif)
![](/icons/59800dou.gif)
更快
![](/icons/59800de.gif)
信息包被传递
![](/icons/59800dou.gif)
所以会导致网络速度
![](/icons/59800de.gif)
减慢
![](/icons/59800dou2.gif)
tcp.nodelay参数只有在TCP超时产生
![](/icons/59800de.gif)
时候才被使用
![](/icons/59800dou2.gif)
设置tcp.nodelay可以提高数据库服务器的间
![](/icons/59800de.gif)
大量数据通讯
![](/icons/59800de.gif)
性能
sqlnet.ora中
automatic_ipc参数
automatic_ipc参数忽略了网络层
![](/icons/59800dou.gif)
所以加快了数据库
![](/icons/59800de.gif)
逻辑连接
![](/icons/59800dou2.gif)
当automatic_ipc=on
![](/icons/59800dou.gif)
Oracle *Net查看当地数据库是否定义以相同
![](/icons/59800de.gif)
名称
![](/icons/59800dou.gif)
假如是
![](/icons/59800dou.gif)
网络层将被忽略
![](/icons/59800dou.gif)
![](/icons/59800yinwei.gif)
此时
![](/icons/59800de.gif)
连接被直接转译为当地
![](/icons/59800de.gif)
IPC连接
![](/icons/59800dou2.gif)
这对于数据库服务器是有用
![](/icons/59800de.gif)
![](/icons/59800dou.gif)
但对于Oracle *Net客户端是没有什么用处
![](/icons/59800dou2.gif)
只有当
![](/icons/59800yi.gif)
个Oracle *Net连接于当地数据库
![](/icons/59800de.gif)
时候
![](/icons/59800dou.gif)
automatic_ipc参数才有可能使用在数据库服务器上
![](/icons/59800dou2.gif)
假如不需要当地连接
![](/icons/59800dou.gif)
将这
![](/icons/59800yi.gif)
参数设置为off
![](/icons/59800dou.gif)
由此可以提高所有Oracle *Net客户端
![](/icons/59800de.gif)
性能
tnsnames.ora和listener.ora中
SDU和TDU参数
SDU(session data unit)和TDU(transport date unit)都位于tnsnames.ora and listener.ora文件中
![](/icons/59800dou2.gif)
SDU指定信息包
![](/icons/59800de.gif)
大小以传送到网络
![](/icons/59800dou2.gif)
在理想情况下
![](/icons/59800dou.gif)
SDU不会超过MTU(maximum transmission unit)
![](/icons/59800de.gif)
大小
![](/icons/59800dou2.gif)
MTU是
![](/icons/59800yi.gif)
个固定值
![](/icons/59800dou.gif)
它取决于使用
![](/icons/59800de.gif)
实际网络操作
![](/icons/59800dou2.gif)
Oracle建议SDU设置相同于MTU.
注重
在7.3.3的前
![](/icons/59800dou.gif)
SDU和TDU都固定于2K而且不能改变
![](/icons/59800dou2.gif)
TDU是使用于Oracle *Net分组数据
![](/icons/59800de.gif)
缺省信息包
![](/icons/59800dou2.gif)
在理想情况下
![](/icons/59800dou.gif)
TDU参数应该是SDU参数
![](/icons/59800de.gif)
倍数
![](/icons/59800dou2.gif)
SDU和TDU
![](/icons/59800de.gif)
缺省值为2
![](/icons/59800dou.gif)
048
![](/icons/59800dou.gif)
最大值都为32
![](/icons/59800dou.gif)
767字节