sqlplus 最耗资源sql语句跟踪[@more@]这片文章主要是介绍怎样查看哪个客户端的哪条sql语句最耗时。
transaction 有四个特性:ACID
Atomicity 原子性 consistency 一致性 isolation 独立性 durability 持久性
主要介绍从4个视图里找到最终的SQL.
v$session
v$transaction
v$process
v$sql
查有多少个用户登录到数据库:
select sid,serial#,username,status from v$session where username is not null;
查看数据服务器上有哪些用户连接上来:
[root@ovt ~]# netstat -anp |more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:718 0.0.0.0:* LISTEN 2232/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2192/portmap
tcp 0 0 0.0.0.0:1523 0.0.0.0:* LISTEN 5331/tnslsnr
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2559/cupsd
tcp 0 0 0.0.0.0:43225 0.0.0.0:* LISTEN 3014/ora_d000_ovt
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 5121/0
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 5209/1
tcp 0 0 127.0.0.1:6012 0.0.0.0:* LISTEN 5240/2
tcp 0 0 168.1.1.108:1523 168.1.1.108:6465 ESTABLISHED 5331/tnslsnr
tcp 0 0 168.1.1.108:1523 168.1.1.65:4165 ESTABLISHED 5384/oracleovt
tcp 0 0 168.1.1.108:1523 168.1.1.65:4177 ESTABLISHED 5389/oracleovt
tcp 0 0 168.1.1.108:1523 168.1.1.65:4094 ESTABLISHED 5349/oracleovt
tcp 0 0 168.1.1.108:6465 168.1.1.108:1523 ESTABLISHED 2982/ora_pmon_ovt
在客户端机器(win)上查看哪个程序连接服务器: netstat -b
查看库里有多少个transacation
select addr,ses_addr from V$TRANSACTION
查看多少个用户连接进来
select sid,serial#,username,status from v$session;
v$session中的sid 和 v$transaction 中的ses_addr是关联的。
select sid,serial#,paddr,username,status from v$session;
select addr,spid from v$process;
v$process 中的
1、V$PROCESS.SPID---> NETSTAT
2、V$SESSION.PADDR-->V$PROCESS.ADDR
3、V$SESSION.SADDR-->V$TRANSACTION.SES_ADDR
4、V$SESSION.SQL_ADDRESS/PREV_SQL_ADDR-->V$SQL.ADDRESS&SQL_TEXT
先根据netstat pid值在V$PROCESS中找到ADDR,
然后根据ADDR-->PADDR对应关系,
找到ses_addr,
select addr,ses_addr,xid from v$transaction;
联合V$SESSION
SELECT SADDR,SID,USERNAME,PADDR,STATUS FROM V$SESSION;
SELECT ADDR,SPID FROM V$PROCESS;
SPID 就能和netstat中的pid对应。
v$SESSION.SQL_ADDRESS --> v$SQL
小布的脚本:
select addr,ses_addr from v$transaction;
select saddr,sid,serial#,username,status from v$session;
select saddr,sid,serial#,username,status,prev_sql_addr,prev_hash_value from v$session;
alter session set nls_date_format = 'YYYY-MM-DD HH:MI:SS';
select addr,sid,username,s.status,process,program from v$transaction t ,v$session s
where t.ses_addr=s.saddr;
select addr,pid,spid,program from v$process;
select saddr,sid,paddr,username from v$porcess;
select saddr,sid,paddr,username from v$session;
select sql_text,address,hash_value from v$sql q,v$session s where s.prev_sql_addr=q.address
and sid= 14;
sid 是上个语句查询出来的、
我自己改编合成一个语句:
select count(*) from v$transaction;
select sid,username,ses_addr,saddr,sql_hash_value,prev_sql_addr,sql_text
from v$transaction t,v$session s,v$sql q where t.ses_addr=s.saddr and s.prev_sql_addr=q.address;
select sid,username,ses_addr,saddr,sql_hash_value,prev_sql_addr,sql_text
from v$transaction t,v$session s,v$sql q where t.ses_addr=s.saddr and s.sql_hash_value=q.hash_value;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/309902/viewspace-1055377/
,如需转载,请注明出处,否则将追究法律责任。