通过Oracle的v$session s,v$sqlarea视图反查连接未释放的问题

在Oracle数据库中,遇到性能问题如连接未释放,可通过v$session、v$sqlarea等视图进行诊断。本文介绍了如何利用这些视图在高并发下查看等待和连接中的SQL,以及在运维中监控数据库连接,最终定位并解决代码中资源释放的问题。强调了遵循代码规范和早期审查的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在新系统上线时,用loadrunner做性能测试时,发现出现了连接不能释放的问题。由于之前的代码审查不够严谨,猜测是代码中的连接未释放造成的。项目数据库用的是Oracle,需要从结果反推寻找代码中存在的问题。这篇博客将简单地说明如何使用oracle的几个性能相关视图反推找到问题代码的。

Oracle几个与性能有关的视图简单介绍
  1. v$process

    这个视图提供的信息,都是oracle服务进程的信息
    服务进程分两类:一是后台的,一是dedicate/shared server

    pid, serial# oracle分配的PID
    spid 操作系统的pid
    program 服务进程对应的操作系统进程名

  2. v$session

    这个视图主要提供的是一个数据库connect的信息,而且主要是client端的信息,比如以下字段:

    machine 哪台机器
    terminal 使用的终端
    osuser 操作系统连接oracle的用户
    program 通过什么客户端程序,比如TOAD
    process 操作系统分配给TOAD的进程号
    logon_time 在什么时间
    username 以什么oracle的帐号登录
    command 执行了什么类型的SQL命令
    sql_hash_value SQL语句信息

    当然,也有一些是server端的信息:

    paddr 即v$process中的server进程的addr
    server 服务器是dedicate/shared

  3. v$open_cursor

    列出session打开的所有cursors,很多时候都将被用到,比如:通过它查看各个session打开的cursor数。

高并发状态下,查看等待和处于连接中的全部连接(正在产生连接的sql语句)

 当模拟高并发状态解除后,如果正常使用资源,loadrunner的监控图应该能显示在几分钟内很快地释放资源,但如果没有,一定是存在资源释放的问题。这时候在PL_SQL里执行如下代码,可以看到当前正在处于连接状态的全部连接以及正在执行的sql代码。
从这些sql代码,在开发工具内进行搜索就可以准确地找到有问题的地方。

SELECT /*+ rule*/ 
B.INST_ID, 
A.EVENT, 
C.SID, 
B.SPID, 
C.MACHINE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值