监听日志过大导致数据库连接变慢

收到公司一项目组邮件,说某开发环境的数据库连接不稳定,时快时慢,但是一旦连上数据库,整体的操作并不慢,想让我帮忙看看。

环境:Windows 2K8 R2 64位操作系统+Oracle 11gR2 64 bit单实例数据库 。

现象:在数据库服务器上,tnsping本地机器上的Oracle网络服务名,果然时快时慢。快时延迟只有10毫秒或者是0毫秒,而慢时延迟能达到10000多毫秒。这个显然不能接受。

思路:

1 第1反映可能是Oracle网络配置问题;
2 数据库服务器或者监听进程过于繁忙导致的;

处理:

经过排查和分析,由于是开发环境,各种不知名的原因,导致该Windows服务器上安装了1套10g的数据库软件[未建库],1套文中提到的11gR2单实例数据库,10g和11g版本的环境分别创建了各自的监听程序,10g的在默认1521端口,11g的在1522端口,并且2个监听程序的名字都是listener。问题更为蹊跷的是,如果tnsping 10g软件下的网络服务名很正常,tnsping 11g软件下的网络服务名才会出现时快时慢的现象。

于是乎,停掉10g环境下的那个占用1521端口的监听,重新配置11g的监听使之驻留在1521端口上。此时问题依旧:

C:\Users\Administrator>tnsping orcl

TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-6月 -2014 16:49:20

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

已使用的参数文件:
D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora


已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.87)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (0 毫秒)

C:\Users\Administrator>tnsping orcl

TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 24-6月 -2014 16:49:22

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

已使用的参数文件:
D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora


已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.87)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))
OK (7360 毫秒)

C:\Users\Administrator>

说明问题应该不至于出现在网络配置上面。

同时,该库是一个开发用的数据库,更谈不上繁忙之说。

那么,问题究竟应该出现在那儿呢?既然,在服务器上tnsping本地机器上的网络服务名不稳定,且SQL*PLUS通过网络服务名来访问本地机器上的Oracle服务肯定也会慢,那么就发起一个本地的网络服务连接,然后看看监听的日志信息。果不其然,发现了一点儿端倪,监听程序的日志文件过大:

listener_log_4GB

listener_log_4GB

原来,造成问题的罪魁就是这个过大的日志文件[Windows下Oracle的监听日志文件超过4G大小,便会出现该问题]!解决的方法就很简单,停止监听程序,删除监听日志文件,重启监听,问题解决!