通过操作系统上的PID找出相应的SQL语句

linux平台下,我们一般通过TOP命令,查看性能消耗最大的进程,如果看到是oracle进行,那么就需要通过进程号,查询该进程当前执行的SQL语句,网上百度有很多SQL,我一般通过下面的方式进行查找:

通过操作系统上的PID找出相应的SQL语句的SID:

SELECT s.sid, p.spid FROM v$session s, v$process p WHERE s.paddr = p.addr  AND  < p.spid = <os pid> 

然后通过SID找出相应的SQL语句的具体内容:


SELECT s.sid, s.status, q.sql_text FROM v$session s, v$sqltext q WHERE s.sql_hash_value = q.hash_value AND s.sql_address = q.address AND s.sid = <sid> order by q.piece;

合并一


SELECT   /*+ ORDERED */
         sql_text
    FROM v$sqltext a
   WHERE (a.hash_value, a.address) IN (
            SELECT DECODE (sql_hash_value,
                           0, prev_hash_value,
                           sql_hash_value
                          ),
                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
              FROM v$session b
             WHERE b.paddr = (SELECT addr
                                FROM v$process c
                               WHERE c.spid = '&pid'))
ORDER BY piece ASC
/

合并二:

Select s.Sid, s.Status, q.Sql_Text
From V$session s, V$sqltext q
Where s.Sql_Hash_Value = q.Hash_Value And s.Sql_Address = q.Address And
                        s.Sid In (Select s.Sid
                                                                 From V$session s, V$process p
                                                                 Where s.Paddr = p.Addr And  p.Spid = '&pid' )
Order By q.Piece;

时间: 2024-07-29 13:13:59

通过操作系统上的PID找出相应的SQL语句的相关文章

如何写出高性能的SQL语句(转)

高性能的SQL语句能提高页面的执行效率,让你的服务器运行的更为流畅,所以大家在以后的使用过程中,尽量的考虑到效率. (1)整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) (2)删除重复记录: 最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP

如何写出高性能的sql语句?

(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHER

解决:hibernate+mysql中文查询不出结果,SQL语句也正常

今天做一个项目挣点外快hibernate+mysql数据库,Java后台全部正常,查看Java想数据库发送的语句也是正常的,但是中文就是查询不出结果,中文在Java中没有乱码,用new String(or_name.getBytes("ISO-8859-1"), "UTF-8"); 后台没有乱码,尝试了网上的很多方法都不行,getString或者getParamter都不行 最后感觉是mysql的问题,然后将mysql的安装目录下的my.ini中的两个地方改为utf

如何写出高性能的SQL语句

1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择"索引查找"方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 "全表扫描"方式. 可见,执行计划并不是固定的,它是"个性化的".产生一个正确的"执行计划"有两点很重要:

ORACLE中能否找到未提交事务的SQL语句

  在Oracle数据库中,我们能否找到未提交事务(uncommit transactin)的SQL语句或其他相关信息呢?  关于这个问题,我们先来看看实验测试吧.实践出真知. 首先,我们在会话1(SID=63)中构造一个未提交的事务,如下所: SQL> create table test   2  as   3  select * from dba_objects;   Table created. SQL> select userenv('sid') from dual;   USEREN

(转)理解SQL原理,写出高效的SQL语句 Sql养成一个好习惯是一笔财富

我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还能保证下一个人能看懂我们的存储过程吗? 要知道sql语句,我想我们有必要知道sqlserver查询分析器怎么执行我么sql语句的,我么很多人会看执行计划,或者用 profile来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把

SQL Server 找出值得优化的语句

方法 1. sys.dm_exec_qurey_stats 返回 SQL Server 中缓存查询计划的聚合性能统计信息. 缓存计划中的每个查询语句在该视图中对应一行, 并且行的生存期与计划本身相关联. 在从缓存删除计划时,也将从该视图中删除对应行. select sqlText.text,stt.creation_time,stt.total_logical_reads,stt.total_logical_writes,stt.total_physical_reads        from

子查询注意这几点, 就可以写出好的sql语句

执行sql时子查询的语句一般优先执行 理论上多表查询效率是高于子查询(根据子查询不值一个查询语句可能会有多个from但是多表查询只产生一个from), 但是在oracle中子查询效率一般会高于多表查询

题目:写出一条SQL语句,查询工资高于10000,且与他所在部门的经理年龄相同的职工姓名。

create table Emp( eid char(20) primary key, ename char(20), age integer check (age > 0), did char(20), salary float,)create table Dept( did char(20) primary key, dname char(20), mgr_did char(20), )alter table Emp add constraint fk_emp_did foreign key