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语句进行分析。