oracle查等待事件的sql
时间: 2023-09-07 13:13:42 浏览: 46
你可以使用以下 SQL 查询来查看 Oracle 数据库中正在等待的事件:
```
SELECT event, sid, serial#, wait_class, seconds_in_wait
FROM v$session
WHERE wait_class != 'Idle'
AND wait_class != 'Application'
AND wait_class != 'Concurrency'
AND wait_class != 'User I/O'
AND wait_class != 'Commit'
AND wait_class != 'System I/O'
AND wait_class != 'Scheduler'
AND wait_class != 'Other';
```
该查询将返回正在等待的事件、会话 ID、序列号、等待类别和等待时间(以秒为单位)。注意,该查询仅返回等待类别不是空闲、应用程序、并发、用户 I/O、提交、系统 I/O、调度和其他的会话。
相关问题
oracle中如何查询Top10等待事件
要查询 Oracle 数据库中的前 10 个等待事件(Top 10 Wait Events),可以执行以下步骤:
1. 使用以下查询来获取当前等待事件的统计信息:
```sql
SELECT event, total_waits, time_waited_micro/1000000 AS time_waited_seconds
FROM v$system_event
WHERE event NOT LIKE 'SQL*Net%'
ORDER BY time_waited_micro DESC;
```
这将返回按照等待时间排序的等待事件列表,包括事件名称、总等待次数和总等待时间(以秒为单位)。
2. 如果需要包括用户会话级别的等待事件统计信息,可以使用以下查询:
```sql
SELECT event, total_waits, time_waited_micro/1000000 AS time_waited_seconds
FROM v$session_event
WHERE event NOT LIKE 'SQL*Net%'
ORDER BY time_waited_micro DESC;
```
这将返回按照等待时间排序的每个会话的等待事件列表。
3. 要获取前 10 个等待事件,可以在查询中添加 `ROWNUM <= 10` 条件。例如:
```sql
SELECT event, total_waits, time_waited_micro/1000000 AS time_waited_seconds
FROM v$system_event
WHERE event NOT LIKE 'SQL*Net%'
ORDER BY time_waited_micro DESC
FETCH FIRST 10 ROWS ONLY;
```
或者:
```sql
SELECT event, total_waits, time_waited_micro/1000000 AS time_waited_seconds
FROM v$session_event
WHERE event NOT LIKE 'SQL*Net%'
ORDER BY time_waited_micro DESC
FETCH FIRST 10 ROWS ONLY;
```
这些查询将返回按照等待时间排序的前 10 个等待事件的统计信息。请注意,确切的查询语法和字段名称可能会因 Oracle 数据库版本而有所不同。在特定环境中,您可能需要参考相关的文档或联系数据库管理员以获取更准确的查询语句和信息。
如何查询Oracle实例当前执行的事件和SQL
你可以通过以下步骤查询Oracle实例当前执行的事件和SQL:
1. 登录到Oracle实例的SQL*Plus或SQL Developer。
2. 运行以下命令,以查看当前正在执行的SQL和事件:
```
SELECT s.sid, s.serial#, s.username, s.event, s.seconds_in_wait, s.sql_id, t.sql_text
FROM v$session s
LEFT JOIN v$sqltext t ON s.sql_id = t.sql_id
WHERE s.status = 'ACTIVE';
```
这个查询将返回一个结果集,其中包含正在执行的会话的SID、序列号、用户名、事件、等待时间、SQL ID和SQL文本。
请注意,如果查询结果集中的SQL ID为空,则会话可能正在等待而不是执行SQL。
3. 如果您想获取更多详细的SQL执行统计信息,可以使用以下命令:
```
SELECT *
FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', '&child_number'));
```
此命令将返回给定SQL ID和子编号的执行计划和统计信息。
请确保您具有足够的权限来执行这些命令,并且只查询您有权限访问的会话和SQL。