查看Oracle中正在执行和执行过的SQL语句

查看Oracle中正在执行和执行过的SQL语句,主要通过查询动态性能视图实现。以下是具体方法:

查看正在执行的SQL语句

通过v$session和v$sql关联查询,语句:

select s.sid,
       s.serial#,
       s.username,
       s.status,
       s.sql_id,
       q.sql_text,
       s.machine,
       s.program
  from v$session s
  join v$sql q
    on s.sql_id = q.sql_id
 where s.status = 'ACTIVE'
   and s.username is not null
 order by s.sid;
图片[1]-查看Oracle中正在执行和执行过的SQL语句-十一张

关键字段说明:

●sid/serial#:会话唯一标识
●sql_id:SQL语句唯一标识
●sql_text:正在执行的SQL文本(可能截断)
●status='ACTIVE':过滤活跃会话
●machine/program:客户端信息

另外,我们还可以根据 SQL_ID 查看完整的 SQL 语句信息:

select sql_fulltext from v$sql where sql_id = '53pmu7yf5x6vf';
图片[2]-查看Oracle中正在执行和执行过的SQL语句-十一张

查看执行过的SQL语句(历史记录)

select sql_id,sql_text,executions, 
       round(elapsed_time/1000000,2) as elapsed_sec,
       round(cpu_time/1000000,2) as cpu_sec,
       disk_reads,buffer_gets,last_active_time
from v$sqlarea 
where executions > 0
order by last_active_time desc;
图片[3]-查看Oracle中正在执行和执行过的SQL语句-十一张

说明:v$sqlarea存储共享池中缓存的SQL执行统计,实例重启或SQL被淘汰后数据会丢失,适合查看近期(几小时到几天内)执行的SQL语句。

查看最近10条执行最耗时的SQL

从Oracle数据库的共享池中检索执行时间最长的前10条SQL语句,这是性能诊断中常用的查询。

select *
  from (select sql_id "SQL标识符", -- SQL语句的唯一标识符
               sql_text "SQL文本", -- SQL文本(通常显示前1000个字符)
               executions "次数",  -- 该SQL语句总共被执行的次数
               round(elapsed_time / 1000000, 2) "总耗时(秒)",
               last_active_time "时间戳" -- 该SQL语句最后一次被执行的时间戳
          from v$sqlarea
         order by elapsed_time desc)
 where rownum <= 10;
图片[4]-查看Oracle中正在执行和执行过的SQL语句-十一张
温馨提示:本文最后更新于2026-01-19 22:07:58,某些文章具有时效性,若有错误或下载地址失效,请在文末评论区留言
© 版权声明
THE END
如果觉得这篇文章对您有帮助,可以收藏本网址,方便下次访问!
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容