行到水穷处,坐看云起时...

Oracle学习之Oracle的跟踪

上一篇 / 下一篇  2012-06-12 10:02:45 / 个人分类:Oracle

/*
    Oracle可以在动态视图v$sql/v$sqlarea/v$sqltext/v$sqltext_with_newlines中查询到Shared pool中已经和正在运行的SQL;其中:
1.v$sql存储的是具体的SQL和执行计划相关信息,它不包含GROUP BY字句,并且为每一条SQL语句中单独存放一条记录(不管执行了多少次);
2.v$sqlarea存储的是SQL和一些相关的统计信息,比如累计的执行次数、逻辑读,物理读等统计信息;实际上,v$sqlarea可以看做是v$sql根据sqltext等做了group by之后进行统计汇总后得到的信息;
3.v$sql与v$sqlarea的来源都是一个:X$KGLCURSOR;
4.实际调优中建议使用v$sql,相对来说比v$sqlarea快,而且还不会产生share pool latch的争用;
5.v$sql及v$sqlarea存放的统计信息在调优时使用居多,但其SQL是不全的(头1000个字符,但有一个CLOB列——character large object,字符型巨对象——提供SQL语句的完整文本),如果想获得完整的SQL就要用v$sqltext;
6.v$sqltext存储的是完整的SQL,但SQL语句被分片显示,字段PIECE表示每个SQL分片后的的行顺序;字段ADDRESS和HASH_VALUE一起唯一标志一条SQL(也可以使用sql_id);
7.v$sqltext_with_newlines和v$sqltext类似,区别在于v$sqltext_with_newlines中可以显示SQL语句中的空格等,便于阅读;
8.在Oracle10g R2版中新加入了一个视图v$sqlstats,这个视图比v$sql和v$sqlarea更快更方便。它只包含其它视图column的子集。一般来说,它不连接用户信息。它的每一行对应一条SQL语句及其执行计划的hash value(杂凑值)。它的额外优点是,这个视图中的纪录入口比其它视图更为持久;因此,虽然某一条语句已经在共享池中过期失效(这导致它从v$sqlarea中消失),但仍然可以通过该视图找到它;
9.可以在v$open_cursor中查到正处于open状态的cursor
10.可以通过v$session查询到当前会话中正在执行的SQL语句相关信息,比如SQL语句来源(客户端计算机名,客户端操作系统用户名等)
*/
/*
v$sql和v$sqlarea中的字段中:
LAST_ACTIVE_TIME是查询计划最后一次被激活的时间,
LAST_LOAD_TIME是查询计划最后被装载的时间,
FIRST_LOAD_TIME是查询计划第一次被装载的时间
*/
---查询在某个指定时刻以后Oracle中执行的SQL
---是所有的SQL,不能区分其来源
select
AA.sql_id,AA.piece as 行号,AA.sql_text,
BB.sqltype,BB.command_type,
BB.module,BB.service,BB.parsing_schema_name,
BB.first_load_time,BB.last_load_time,BB.last_active_time,
BB.address,BB.hash_value
from
v$sqltext AA inner join
(
    select
    address,hash_value,sql_id,
    first_load_time,last_load_time,last_active_time,
    command_type,sqltype,
    parsing_schema_name,service,module
    from v$sql
    /*指定所要查询SQL的开始执行时间*/
    where last_active_time>to_date('2012-06-11 19:46:00','YYYY-MM-DD HH24:MI:SS')
    /*指定所要查询应用程序使用的数据库用户名*/
          and parsing_schema_name='SA'
    /*指定所要查询应用程序使用的数据库服务名(区分大小写),如OEM使用的服务名为“SYS$USERS”*/
          and
            (
               service='XXX' /*XXX为服务端的数据库名*/
        ---   or  service='SYS$USERS'
             )
    /*指定SQL来源应用程序模块名称,如OEM中SQL工作表为“SQL Worksheet Connection”*/
          and
             (
                module='WebDev.WebServer.exe'   ---VisualStudio2008Web调试工具
                ---module='w3wp.exe'         ---IIS进程/VisualStudio2008Web调试工具(有些情况下)
                ---or module='SQL Worksheet Connection'
                ---or module='PL/SQL Developer'
                ---or module='plsqldev.exe'
              )
) BB
/*指定连接条件;address和hash_value一起唯一标志一条SQL,也可以使用sql_id来区分不同的SQL*/
on  AA.sql_id=BB.sql_id
/*指定排序规则,将属于同一条SQL的文本按行号排列显示*/
order by BB.last_active_time,AA.sql_id,AA.PIECE

TAG:

 

评分:0

我来说两句

日历

« 2024-05-25  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 10204
  • 日志数: 10
  • 书签数: 1
  • 建立时间: 2011-10-19
  • 更新时间: 2012-07-31

RSS订阅

Open Toolbar