从客户端到SQL语句的跟踪

来源:互联网 发布:maxdos网络克隆服务端 编辑:程序博客网 时间:2024/06/01 09:01

From Client To SQL从客户端到SQL语句的跟踪

讲解如何从客户端一步一步地跟踪到后台执行的SQL语句,对于性能调优的人有点帮助

 

 

应用服务器与数据库服务器之间的沟通,大多数都是SQL语句。

现在讨论应用服务器到数据库服务器之间的通讯。

应用服务器发来的DML语句,会在数据库产生transaction。

如果某个用户发现自己的事务特别慢,怎么解决呢?

事物有ACID四个特性。

原子性,一致性,隔离性,持久性。

一致性:a transaction takes the database from oneconsistent state to the next

 

客户端连接上来

sqlplushr/hr@oracle9ivm

做一些DML语句

服务器

Desc v$transaction

Select addr fromv$transaction

就能看到现在有哪些事务在进行。

从进程号,到端口号,到哪个事务,到哪个SQL语句,顺藤摸瓜地找出来。

用哪些工具呢?

Netstat,ifconfig,ps –ef 命令与如下4个视图

V$session:当前有多少个用户连接到数据库服务器上

V$transaction

V$process

V$SQL:当前正在运行的一些SQL的情况

就能从客户端一步一步跟踪到后台。

 

Selectsid,username,status from v$session;

空的username是ORACLE内部进程连上来的会话,不用操心。我们关心的是有username的部分。

在客户端WINDOWS,我们舒服ipconfig,可以看出去的本机IP地址是哪个, 这里是192.168.0.1

Netstat –anp |more

Listen是代表还在侦听,而establish就是已经建立连接。

如图,local address是192.168.0.88:1521,foreign address是192.168.0.1,而且后面是establish就证明已经建立了连接

Ps –ef|grep 3797,就抓到了负责与远端机器连接的专用服务器进程。

此时在WINDOWS下 netstat –b也可以查看相关信息。可以看到客户端的进程ID与进程名,继而可以在任务管理器中查看信息。

 

经过如上步骤,客户端到服务器,是哪些端口,哪些进程在进行连接,都知道了。

从netstat可以找到SPID,进而找v$session,然后是v$transaction,然后是v$SQL。几个表的某些列是相关的。

留意592BAE00

从后往前推也可以,从前往后也可以,只要知道这个联络图就可以了。

 

这样如果以后客户抱怨某个transaction比较慢的话,我们就可以利用这个关系图,最后找到该SQL语句,就可以告诉客户,你看,你慢的就是这条SQL语句,然后再进一步对这条SQL语句进行分析。


原创粉丝点击