📜  oracle 长时间运行查询列表 - SQL (1)

📅  最后修改于: 2023-12-03 14:44:57.018000             🧑  作者: Mango

Oracle 长时间运行查询列表 - SQL

在数据库管理中,查询是一个很常见的操作,但有时可能会遭遇长时间运行的查询。这些查询可能会占用过多的资源,从而影响其他操作的执行速度。在 Oracle 数据库中,可以通过查看查询列表来监控当前的查询进程。下面介绍如何在 Oracle 数据库中查看长时间运行的查询列表。

步骤1 - 切换到 sysdba 用户

首先,需要使用 sysdba 用户登录到 Oracle 数据库。可以使用以下命令切换到 sysdba 用户:

$ sqlplus / as sysdba
步骤2 - 查询当前正在运行的查询

使用以下命令查询当前正在运行的查询:

SELECT s.sid, s.serial#, s.sql_id, s.username, s.program, s.status, s.sql_exec_start
FROM v$session s
WHERE s.sql_id IS NOT NULL
ORDER BY s.sql_exec_start;

上述命令查询了当前正在运行的查询的会话 ID(SID)、序列号(serial#)、SQL ID、用户名、程序、状态和 SQL 执行开始时间。这个列表可以让您了解哪些查询正在运行以及它们已经运行了多长时间。

步骤3 - 查询长时间运行的查询

使用以下命令查询长时间运行的查询:

SELECT ses.sid,
       ROUND(ses.last_call_et/60, 2) AS duration_minutes,
       sql.sql_text
  FROM v$sql sql,
       v$session ses
 WHERE ses.sql_id = sql.sql_id
   AND ses.status = 'ACTIVE'
   AND ses.last_call_et >= 300
 ORDER BY ses.last_call_et DESC;

上述命令查询了持续时间超过5分钟(300秒)的查询的会话 ID、持续时间和 SQL 语句。通过这个列表,您可以查看长时间运行的查询,并且可以使用会话 ID 终止这些查询,以释放资源。

总结

通过查看查询列表,可以及时发现长时间运行的查询,从而避免它们占用过多的资源,并且可以及时终止这些查询以释放资源。