关于Oracle listener日志解析利器的使用方法
作者:oracleblog 发布时间:2024-01-13 21:36:59
前言
我们在处理数据库的问题的时候,有时在数据库端看不到异常的等待,但是应用却报连接异常。
这种情况,有可能是在压力还没有传递到数据库,在网络这层已经发生问题了。如连接风暴,此时的数据库listener的进程已经忙不过来,将连接丢弃。(在主机层面可以看到tcpListeneDrop增加)。
我们如果去看普通的listener日志,看到的东西是这样的:
……
24-FEB-2017 09:11:03 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=sqlplus@mynwdb)(HOST=mynwdb)(USER=appl))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65184)) * establish * mynwdb * 0
24-FEB-2017 09:11:06 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=STANDARD)(HOST=mynwdb)(USER=appl))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65186)) * establish * mynwdb * 0
24-FEB-2017 09:11:10 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=STANDARD)(HOST=mynwdb)(USER=appl))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65188)) * establish * mynwdb * 0
24-FEB-2017 09:11:10 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=STANDARD)(HOST=mynwdb)(USER=appl))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65189)) * establish * mynwdb * 0
Fri Feb 24 09:11:14 2017
24-FEB-2017 09:11:14 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65194)) * establish * mynwdb * 0
24-FEB-2017 09:11:14 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65195)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65196)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65197)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65198)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65199)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65200)) * establish * mynwdb * 0
24-FEB-2017 09:11:15 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65201)) * establish * mynwdb * 0
24-FEB-2017 09:11:16 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65202)) * establish * mynwdb * 0
24-FEB-2017 09:11:16 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65203)) * establish * mynwdb * 0
24-FEB-2017 09:11:16 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65204)) * establish * mynwdb * 0
24-FEB-2017 09:11:16 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65205)) * establish * mynwdb * 0
24-FEB-2017 09:11:16 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65206)) * establish * mynwdb * 0
24-FEB-2017 09:11:17 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65207)) * establish * mynwdb * 0
24-FEB-2017 09:11:17 * (CONNECT_DATA=(SID=mynwdb)(CID=(PROGRAM=INVMGR)(HOST=mynwdb)(USER=nusr))) * (ADDRESS=(PROTOCOL=tcp)(HOST=11.22.3.123)(PORT=65208)) * establish * mynwdb * 0
……
这样我们会看的比较晕,不知道里面的连接数变化。
有一个listener日志的解析利器,可以分析到这种类型的问题。下载见文末。
用法:lsnr_analyzer.pl -t ‘time rexge' [-h] filename
如,我们要分析24-FEB-2017 09:30~09:59的连接情况,可以如下操作:
[ora@mynwdb trace]$ lsnr_analyzer.pl -t '24-FEB-2017 09:[3-5][0-9]' mynwdb_cut1.log
24-FEB-2017 09:30 => Total:37
24-FEB-2017 09:31 => Total:50
24-FEB-2017 09:32 => Total:17
24-FEB-2017 09:33 => Total:16
24-FEB-2017 09:34 => Total:19
24-FEB-2017 09:35 => Total:16
24-FEB-2017 09:36 => Total:17
24-FEB-2017 09:37 => Total:16
24-FEB-2017 09:38 => Total:13
24-FEB-2017 09:39 => Total:29
24-FEB-2017 09:40 => Total:43
24-FEB-2017 09:41 => Total:38
24-FEB-2017 09:42 => Total:17
24-FEB-2017 09:43 => Total:16
24-FEB-2017 09:44 => Total:42
24-FEB-2017 09:45 => Total:21
24-FEB-2017 09:46 => Total:16
24-FEB-2017 09:47 => Total:15
24-FEB-2017 09:48 => Total:12
24-FEB-2017 09:49 => Total:25
24-FEB-2017 09:50 => Total:47
24-FEB-2017 09:51 => Total:41
24-FEB-2017 09:52 => Total:21
24-FEB-2017 09:53 => Total:12
24-FEB-2017 09:54 => Total:17
24-FEB-2017 09:55 => Total:16
24-FEB-2017 09:56 => Total:20
24-FEB-2017 09:57 => Total:17
24-FEB-2017 09:58 => Total:17
24-FEB-2017 09:59 => Total:21
[ora@mynwdb trace]$
可以看到,在09:31的时候,有个连接数的增加,到了一分钟50个连接。
我们可以加-h的参数,breakdown具体是哪些主机连接过来的:
[ora@mynwdb trace]$ lsnr_analyzer.pl -t '24-FEB-2017 09:[3-5][0-9]' -h mynwdb_cut1.log
24-FEB-2017 09:30 => Total:37
11.22.3.123 37
24-FEB-2017 09:31 => Total:50
22.3.4.111 1
11.22.3.123 49
24-FEB-2017 09:32 => Total:17
10.8.1.218 1
11.22.3.123 16
24-FEB-2017 09:33 => Total:16
11.22.3.123 16
24-FEB-2017 09:34 => Total:19
11.22.3.123 19
24-FEB-2017 09:35 => Total:16
11.22.3.123 16
24-FEB-2017 09:36 => Total:17
22.3.4.111 1
11.22.3.123 16
24-FEB-2017 09:37 => Total:16
12.5.6.221 1
11.22.3.123 15
24-FEB-2017 09:38 => Total:13
11.22.3.123 13
24-FEB-2017 09:39 => Total:29
11.22.3.123 29
24-FEB-2017 09:40 => Total:43
11.22.3.123 43
24-FEB-2017 09:41 => Total:38
22.3.4.111 1
11.22.3.123 37
24-FEB-2017 09:42 => Total:17
12.5.6.221 1
11.22.3.123 16
24-FEB-2017 09:43 => Total:16
11.22.3.123 16
24-FEB-2017 09:44 => Total:42
11.22.3.123 42
24-FEB-2017 09:45 => Total:21
11.22.3.123 21
24-FEB-2017 09:46 => Total:16
22.3.4.111 1
11.22.3.123 15
24-FEB-2017 09:47 => Total:15
12.5.6.221 1
11.22.3.123 14
24-FEB-2017 09:48 => Total:12
11.22.3.123 12
24-FEB-2017 09:49 => Total:25
11.22.3.123 25
24-FEB-2017 09:50 => Total:47
11.22.3.123 47
24-FEB-2017 09:51 => Total:41
22.3.4.111 1
11.22.3.123 40
24-FEB-2017 09:52 => Total:21
12.5.6.221 1
11.22.3.123 20
24-FEB-2017 09:53 => Total:12
11.22.3.123 12
24-FEB-2017 09:54 => Total:17
11.22.3.123 17
24-FEB-2017 09:55 => Total:16
11.22.3.123 16
24-FEB-2017 09:56 => Total:20
22.3.4.111 1
11.22.3.123 19
24-FEB-2017 09:57 => Total:17
12.5.6.221 1
11.22.3.123 16
24-FEB-2017 09:58 => Total:17
11.22.3.123 17
24-FEB-2017 09:59 => Total:21
11.22.3.123 21
[ora@mynwdb trace]$
可以看到09:30的时候,是来自11.22.3.123有49个连接,来自22.3.4.111有1个连接。
注1:lsnr_analyzer.pl 是用来分析已经establish的连接,如果是其他连接,不统计在内。
注2:lsnr_analyzer.pl 的统计比较消耗cpu,30万行的listener日志分析大约1秒出结果,300万行的listener日志分析大约6秒出结果。所以如果listener日志比较大,建议tail剪切后统计。
对于已经出现tcpListenDrop的情况,我们分几种情况分析:
(1)如果是突然的连接风暴,需要控制前端的连接,如weblogic中间件逐台启动,而不是同时启动;
(2)如果一直连接数很高,导致listener无法处理,就需要拆分listener,如按照端口拆分。
点击下载:lsnr_analyzer.pl
来源:https://oracleblog.org/working-case/analyzer-oracle-listener/


猜你喜欢
- 1、查询时间区间日期列表,不会由于数据表数据影响select a.date from ( select curda
- 在计算机普及的现代设计领域,文字的设计的工作很大一部分由计算机代替人脑完成了(很多平面设计软件中都有制作艺术汉字的引导,以及提供了数十上百种
- fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 Nonefetchall() 返回多个元组,即返回多个
- 目录构建消息对象发送邮件要点在很多时候,使用 Python 发送邮件可能没有办法使用邮件服务器提供的 API,因为不是所有的邮件服务商都会提
- python编写计算器,供大家参考,具体内容如下(1)计算器界面如下:(2)基本满足了计算器的所有需求,使用时不可键盘输入,只能鼠标点击左键
- 1.创建主键语法 ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名)
- 这篇文章主要介绍了基于python读取.mat文件并取出信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- Python中的penpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。penpy
- 1. 引言序列化是将对象转换为可以在以后保存和检索介质中的过程。比如,将对象的当前状态保存到文件中。对于一些复杂的项目,序列化是所有开发人员
- 用js判断复选框是否选中及选中个数,以前经常有朋友提到复选框的选中问题,这段代码可以帮你解决这个问题,而且它还可以判断你选择了多少个复选框,
- 1、判断请求头来进行反爬这是很早期的网站进行的反爬方式User-Agent 用户代理referer 请求来自哪里cookie 也可以用来做访
- 一、需求说明能够根据模板批量生成docx文档。具体而言,读取excel中的数据,然后使用python批量生成docx文档。二、实验准备准备e
- 一旦被黑客获取到webshell,黑客就知道了你的sqlserver管理员密码,如果sqlserver再没有经过安全设置那么黑客很容易就提权
- 一、前言在Python中,除了可以自定义模块外,还可以引用其他模块,主要包括使用标准库和第三方模块。下面分别进行介绍。二、导入和使用标准模块
- 最近刚开始学python,正好实习工作中遇到对excel中的数据进行处理的问题,就想到利用python来解决,也恰好练手。实际的问题是要从e
- 奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christo
- 刚开始学习python,python相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析, 不可变对象也如同java得I
- 一、背景本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样。二、准备工作1.安装Python3下载
- 1.zip用法简介在python 3.x系列中,zip方法返回的为一个zip object可迭代对象。class zip(object):&
- 安装lxml首先需要pip install lxml安装lxml库。如果你在ubuntu上遇到了以下错误:#include "li