目前遇到2种情况可导致连接缓慢
一。DNS服务器故障导致Oracle连接特别慢
环境:redhat 5.2 Oracle11.2.0.1
一。问题:
oracle在客户端连接时,能连上,但特别慢。
SQL> conn pera/pera@qa611s已连接。
SQL>
要等10s多,才能连上,
二。解决方法:
检查了防火墙,selinux,都是关闭的,
[root@pera611oracle ~]# vi /etc/resolv.conf
nameserver 192.168.0.8
将原来是192.168.0.4, 换成192.168.0.8 就好了。
原因是DNS服务器192.168.0.4出现了问题。
二。由于listener.log过大导致连接慢
环境:windows2008+oracle11.1.0.6.0
原因:
由于listener.log过大导致连接缓慢 。
E:\oracle11g\diag\tnslsnr\test\listener\trace\listener.ora
该文件达到4个G。
连接测试:
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.157)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = pera)))
OK (8990 毫秒)
删除该log后的速度
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.157)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = pera)))
K (10 毫秒)
关于listener.log更多说明:
1.在32位的机器中由于操作系统限制达到2G时,监听Listener无法处理新的连接,所以需要有定期处理的机制。
2.在64位下,windows下过大(如上面实例4G),则监听响应特别慢。在linux暂没有发现有多大影响(见过最大的8.3G,响应同样是10ms)
3.关闭不让生成该log的方法:
LSNRCTL> set log_status off
4.清理方法:
方法1:
LSNRCTL> set log_status off
清理log
LSNRCTL> set log_status on
方法2:
cat /dev/null > listener.log
关于listener.log不超过2G和198天必须重启的bug详细说明,参见maclean的文章:
http://www.askmaclean.com/archives/2gb-listenerlog-198-days-instance.html