一、实时监控利器
- 动态性能视图查询
SELECT sql_id,
sql_text,
executions,
elapsed_time/1000000 as elapsed_sec,
cpu_time/1000000 as cpu_sec,
disk_reads,
buffer_gets
FROM v$sql
WHERE elapsed_time/1000000 > 5 -- 筛选执行超过5秒的SQL
ORDER BY elapsed_time DESC;
- 实时会话监控(每秒刷新)
SELECT s.sid,
s.serial#,
s.username,
s.status,
s.sql_id,
q.sql_text,
q.optimizer_cost
FROM v$session s
JOIN v$sql q ON s.sql_id = q.sql_id
WHERE s.status = 'ACTIVE'
AND s.type <> 'BACKGROUND';
二、深度分析工具
- AWR报告生成步骤:
# 生成快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
# 生成报告
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
关键分析指标:
- SQL ordered by Elapsed Time
- SQL ordered by CPU Time
- SQL ordered by Gets
- ASH实时分析:
SELECT sample_time,
session_id,
sql_id,
event,
blocking_session
FROM v$active_session_history
WHERE sql_id IS NOT NULL
ORDER BY sample_time DESC;
三、SQL Trace高级技巧
- 开启10046跟踪:
ALTER SESSION SET tracefile_identifier = 'slow_sql_trace';
ALTER SESSION SET events '10046 trace name context forever, level 12';
-- 执行待跟踪SQL
EXIT;
- TKPROF解析:
tkprof ora_12345.trc output.txt sys=no aggregate=yes sort=prsela,exeela,fchela
四、执行计划分析
EXPLAIN PLAN FOR
SELECT /*+ YOUR_HINT */ ...;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
五、自动诊断工具
- SQL调优顾问:
DECLARE
task_name VARCHAR2(30);
BEGIN
task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_id => 'g4yfu8q89kj7d',
scope => 'COMPREHENSIVE',
time_limit => 3600);
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name);
END;
/
六、性能视图黄金组合
SELECT * FROM (
SELECT sql_id,
ROUND(elapsed_time/1e6) elapsed_sec,
executions,
ROUND(elapsed_time/decode(executions,0,1,executions)/1e6,4) per_exec_sec,
sql_text
FROM v$sqlstats
ORDER BY elapsed_time DESC)
WHERE ROWNUM <= 10;
注意事项:
- 诊断包授权:AWR/ASH需要Diagnostics and Tuning Pack许可
- 执行计划稳定性:注意SQL Profile和Baseline的影响
- 统计信息时效性:确保统计信息最新
- 绑定变量窥视:可能影响执行计划选择
通过以上方法的组合使用,可以快速定位TOP SQL,结合执行计划分析和SQL调优技术,能有效解决90%以上的数据库性能问题。建议建立定期性能分析机制,对历史SQL进行趋势分析,实现预防性优化。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




