以 oracle 用户执行上述命令,确保 ORACLE_HOME/network/admin 配置正确;对多监听场景使用 lsnrctl status <listener_name> 指定实例。
四 数据库层监控与常用SQL
表空间与容量
表空间使用率(超过 80% 需扩容或清理):
SELECT a.tablespace_name,
round(a.bytes/1024/1024,2) “总大小(MB)”,
round((a.bytes-b.bytes)/1024/1024,2) “已用(MB)”,
round((a.bytes-b.bytes)/a.bytes*100,2) “使用率%”
FROM (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
活跃会话与正在执行的SQL
活跃会话与截断SQL文本:
SELECT s.sid, s.username, s.status, s.machine, substr(sq.sql_text,1,60) sql_text
FROM v$session s JOIN v$sql sq ON s.sql_id = sq.sql_id
WHERE s.status=‘ACTIVE’ AND s.username IS NOT NULL;
长时运行与高耗SQL
按总耗时取 Top N(示例 Top 10):
SELECT sql_id, sql_text, elapsed_time/1e6 “耗时(秒)”, executions
FROM v$sql ORDER BY elapsed_time DESC FETCH FIRST 10 ROWS ONLY;
等待事件与锁等待
等待事件统计:
SELECT event, count(*) AS waits FROM v$session_event GROUP BY event ORDER BY waits DESC;
锁等待会话:
SELECT a.sid, a.serial#, b.username, a.status, a.osuser, a.machine, a.program, a.module, a.action, a.logon_time
FROM v$session a, dba_users b
WHERE a.username = b.username AND a.lockwait IS NOT NULL;
性能诊断报告
使用 AWR/ASH 报告分析负载、SQL、等待与热点对象,结合 EXPLAIN PLAN 验证执行计划与索引有效性。