监视oracle执行的SQL语句(正在执行,已执行,执行性能查看)

-查询Oracle正在执行和执行过的SQL语句及语句执行性能 
1.正在执行的

select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
  from v$session a, v$sqlarea b 
where a.sql_address = b.address 


2.执行过的

select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b
where b.FIRST_LOAD_TIME between '2019-08-15/01:52:00' and '2020-02-20/13:52:02' 
order by b.FIRST_LOAD_TIME


(此方法好处可以查看某一时间段执行过的sql,并且 SQL_FULLTEXT 包含了完整的 sql 语句)
--注意格式:2019-08-15/01:52:00 可以使用  2019-08-15/1:52:00  不能使用
3.查找前十条性能差的sql

SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS, 
COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea 
order BY disk_reads DESC )where ROWNUM<10 ; 


4.查看占io较大的正在运行的session 
 

SELECT se.sid,se.serial#,pr.SPID,se.username,se.status, 
se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads, 
si.block_changes FROM v$session se,v$session_wait st, 
v$sess_io si,v$process pr WHERE st.sid=se.sid AND st. 
sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st. 
wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC ; 

5.其他

select OSUSER,   PROGRAM,   USERNAME,   SCHEMANAME,   B.Cpu_Time,   STATUS,   B.SQL_TEXT 
from V$SESSION A
LEFT JOIN V$SQL B
ON A.SQL_ADDRESS = B.ADDRESS
AND A.SQL_HASH_VALUE = B.HASH_VALUE
order by b.cpu_time desc ;

select address, sql_text, piece 
from v$session, v$sqltext 
where address = sql_address 
order by address, piece 
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在 MySQL 数据库中,可以使用以下 SQL 语句获取当前正在执行SQL 语句及其开始时间: ``` SELECT info.command_type, info.state, info.time, stage.sql_text FROM information_schema.processlist AS info LEFT JOIN performance_schema.threads AS threads ON threads.processlist_id = info.id LEFT JOIN performance_schema.events_statements_current AS stage ON threads.thread_id = stage.thread_id WHERE info.command_type != 'Sleep'; ``` 这个 SQL 语句会返回一个结果集,其中包括当前正在执行SQL 语句的类型、状态、开始时间和完整的 SQL 语句文本。需要注意的是,需要有足够的权限才能查询这些信息。 ### 回答2: 要获取当前正在执行SQL及其开始时间,可以通过查询数据库的系统表获取相关信息。 在MySQL中,可以使用`show processlist;`命令或查询`information_schema.PROCESSLIST`表来获取当前正在执行SQL。 在Oracle中,可以使用以下方法之一来获取当前正在执行SQL: 1. 查询`v$session`视图获取会话信息,并通过会话ID(SID)来查询`v$sql`视图获取SQL语句。 2. 使用`sys.dba_hist_active_sess_history`表来查看历史活动会话,并通过`sql_id`来匹配相应的SQL语句。 在SQL Server中,可以通过以下方法之一来获取当前正在执行SQL: 1. 使用`sys.dm_exec_requests`动态管理视图获取当前执行的所有请求,其中包含SQL语句和开始时间等信息。 2. 使用`sys.dm_exec_sql_text`动态管理函数传入对应的请求ID来获取具体的SQL语句。 一般来说,这些方法都会返回一个包含正在执行SQL语句和开始时间的结果集。可以根据具体的数据库系统和权限限制选择适合的方法来查询相关信息。 注:以上主要是针对关系型数据库,不同的数据库系统可能有不同的系统表和视图来获取相关信息。 ### 回答3: 要获取当前正在执行SQL及其开始时间,可以使用以下方法: 1. 查看数据库的活动会话或进程列表:通过查询数据库系统视图或系统表,例如v$session (Oracle)、sys.sysprocesses (SQL Server)、pg_stat_activity (PostgreSQL)等,找到当前正在执行的会话或进程。 2. 查看会话的当前SQL语句:在找到当前正在执行的会话后,可以使用相应的SQL语句查询会话当前执行SQL语句。例如,在Oracle中,可以使用v$sql或v$sqltext视图查询当前SQL语句;在SQL Server中,可以使用sys.dm_exec_requests或sys.dm_exec_sql_text函数查询当前SQL语句;在PostgreSQL中,可以使用pg_stat_activity视图查询当前SQL语句。 3. 获取SQL开始时间:在找到正在执行SQL语句后,可以通过会话的开始时间字段或系统监视视图中的相关字段获取SQL的开始时间。例如,在Oracle中,可以使用v$session视图中的START_TIME字段;在SQL Server中,可以使用sys.dm_exec_requests视图中的start_time字段;在PostgreSQL中,可以使用pg_stat_activity视图中的backend_start字段。 需要注意的是,不同的数据库系统的查询语句和视图名称可能有所不同,具体要根据使用的数据库系统来调整查询语句。另外,获取当前执行SQL和开始时间可能需要相应的权限和访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿邱先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值