Oracle监听器挂起及性能问题排查

0    105    1

👉 本文共约1330个字,系统预计阅读时间或需5分钟。

当监听器(Listener)发生性能问题时设置一个级别 16 的客户端连接追踪。

在客户端 sqlnet.ora 文件中设置参数:

img

获取这几分钟监听器进程(tnslsnr)的 truss 命令输出以及(发生问题的时间段)不同时间点上 pstack 信息输出。

====================================================

Truss ==> truss -o /tmp/mytruss -faed -p

这个工具会一直保持追踪直到你终止它。可以使用 ctrl-c 来终止 truss。如果你是在后台运行此工具命令,那么可以通过 kill 来杀掉 truss 进程以终止它的运行。

Process stack ==> pstack

执行 3 次此命令,之间间隔 30 秒左右

如果可以的话,做一个短暂的监听器追踪:

=============================================

在服务器端 sqlnet.ora 文件中设置参数:

img

后 2 个参数是为了避免服务器上的监听器 trace 文件过多而设的。举例,如果你在客户端设置了以下参数:

TRACE_FILELEN_SERVER=100

TRACE_FILENO_SERVER=2

那么客户端上的 2 个 100K 的 trace 文件会被先后填满。 之后客户端会切换回第一个 trace 文件继续写入 trace 信息,覆盖原有的 trace 内容,当写满后,再到第二个trace 文件中写,如此往复。因此在 trace 信息被覆盖前,你需要将这些文件拷贝到其他目录。

我们也可以通过使用 LSNRCTL 来对监听器进行追踪,并且此工具会一直运行会话结束(除非你主动关闭它).在 LSNRCTL 命令中不存在“=”符号。

LSNRCTL set current_listener listenername

LSNRCTL SET TRC_LEVEL 16

好了,这样 LSNRCTL 就开始追踪了. 让它跑一会,这样我们就能看到追踪到的行为信息以及相关的延迟了。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

在跑了至少 5 分钟后, 关闭 LSNRCTL:

LSNRCTL set current_listener listenername

LSNRCTL SET TRC_LEVEL OFF

在使用 LSNRCTL 进行追踪时, 在 listener.ora 文件中设置

ADMIN_RESTRICTIONS_listener_name=ON 以禁止运行时其参数的修改。这样,监听器就会拒绝 SET 命令对其参数的修改了。

如果需要改变 listener.ora 中包括 ADMIN_RESTRICTIONS_listener_name 本身以及其他参数的设置。我们将不得不手工修改 listener.ora 文件并用RELOAD 命令使得参数起效。

请注意:服务器端的追踪并不会在你改了 Oracle Net(服务器端) tracing 参数为OFF 后关闭。它会随着客户端 tracing 的关闭而自动关闭。如果 tracing 由于疏忽一直保持启用, 则它可能将导致非常巨大 trace 文件的产生并损耗服务资源。为了正确关闭Oracle Net server tracing, 在设置tracing参数值为OFF后主动stop并restart Oracle Net server 进程. 这可能会导致一些进程的关闭并引发数据库重启,严重程度取决于当前涉及到的会话数量。

因此,你需要上传以下文件:

- 客户端 sqlnet trace 文件

- 对于客户端低效连接的 Pstack trace

- 监听器进程的 Truss 输出

- 3 个对监听器进程的 Pstack traces (3 of them).

- alert.log

- listener.log

- listener traces

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

17 + 20 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部