在新系统上线时,用loadrunner做性能测试时,发现出现了连接不能释放的问题。由于之前的代码审查不够严谨,猜测是代码中的连接未释放造成的。项目数据库用的是Oracle,需要从结果反推寻找代码中存在的问题。这篇博客将简单地说明如何使用oracle的几个性能相关视图反推找到问题代码的。
Oracle几个与性能有关的视图简单介绍
- v$process
这个视图提供的信息,都是oracle服务进程的信息
服务进程分两类:一是后台的,一是dedicate/shared server
pid, serial# oracle分配的PID
spid 操作系统的pid
program 服务进程对应的操作系统进程名
- 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 - 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