Chinaunix首页 | 论坛 | 博客
  • 博客访问: 75347
  • 博文数量: 37
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 386
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-11 11:33
文章分类

全部博文(37)

文章存档

2011年(1)

2010年(30)

2009年(6)

我的朋友

分类: LINUX

2009-12-21 15:26:17

跟踪一个client发出的SQL语句,找出该client抱怨"慢"的原因...
步骤:
a.让该Client告诉你他的ip地址,然后用#netstat -anp | grep 10.1.11.120命令找到如下
tcp        0      0 10.1.11.249:1521            10.1.11.120:1522            ESTABLISHED 4730/oracledenver
tcp        0      0 10.1.11.249:1521            10.1.11.120:1202            ESTABLISHED 4262/oracledenver
tcp        0     52 ::ffff:10.1.11.249:22       ::ffff:10.1.11.120:1200     ESTABLISHED 4135/1
tcp        0      0 ::ffff:10.1.11.249:22       ::ffff:10.1.11.120:1199     ESTABLISHED 4101/0
可以看到该客户端有两个client连接(一般只有一个),找到该client慢的那个链接(如第二个),得到ESTABLISHED 4262/oracledenver中的4262(这是PID).
b.在SQL>下
select spid,addr from v$process where spid='4262'
得到
SPID         ADDR
------------ --------
4262         59290F18
此时查到的ADDR就是该client连接在Oracle中的"地址".
c.SQL>
select paddr,sql_address from v$session where paddr='59290F18';
得到
PADDR    SQL_ADDR
-------- --------
59290F18 5BEF97D4
到此得到的SQL_ADDR就是oracle中SQL语句池中的SQL语句地址.
d.SQL>
select sql_text,address from v$sql where address='5BEF97D4';
得到
SQL_TEXT                          ADDRESS
--------------------------------- --------
insert into m values(2,'q3dx1')   5BEF97D4
到此就ok,由上可知该client执行的SQL语句是insert into m values(2,'q3dx1')。
当然实际生产环节,不可能这么简单的SQL语句就很"慢",但是复杂的SQL语句也是这样去查,得到的SQL语句肯定复杂得多,而SQL_TEXT列的类型是VARCHAR2(1000),
可知是1000个字节,一般的SQL语句不会超过这个大小的。
e.这是从客户端出发去跟踪,但是实际当中有可能得不到客户端的ip地址,也就是说DBA会发现oracle运行很慢,但是有知道是客户端的大流量操作,这是就需要从
v$transaction视图中去跟踪SQL语句,方法同上面只是得到v$session视图中的SQL_ADDRESS不一样。
f.SQL>
select ses_addr from v$transaction;
得到
SES_ADDR
--------
592BA564
由SES_ADDR值去跟踪
SQL>select saddr,sql_address from v$session where saddr='592BA564';得到
SADDR    SQL_ADDR
-------- --------
592BA564 5BEF97D4
上面的5BEF97D4就是前面第一样方法中的SQL_ADDR值,后同。
g.SQL>select saddr,sql_address,prev_sql_addr from v$session where saddr='592BA564';得到
SADDR    SQL_ADDR PREV_SQL
-------- -------- --------
592BA564 5BEF97D4 5BEF97D4
想一想为什么SQL_ADDR和PREV_SQL值一样,此时???
h.以上方法较为笨拙
其实可以用几句带有jion子句的select语句查出来,想一想,构造一下???
阅读(832) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~