获取数据库30天内各个指标的TOP语句

本文聚焦于从DBA_HIST_SQLSTAT历史数据中提取SQL性能关键指标,包括平均执行时间、CPU时间、缓冲获取次数、解析率、物理读取量、磁盘读取次数、总执行次数和程序执行时间,旨在快速识别一周内性能瓶颈的SQL语句,为数据库优化提供依据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要查询短时间内的可以从v$sql 或者是v$sqlarea 如果要查询一周或者一个月内 那么有可能在V$SQLAREA里找不到!下面是通过历史DBA_HIST_SQLSTAT里获得, 这个是通过快照方式保留下来的.


--执行时间最长的


WITH  BASTABLE AS 
(  
  SELECT DBMS_LOB.SUBSTR(SQL_TEXT,4000, 1 ) AS SQL_FULL_TEXT,
         DHST.SQL_ID,
         ROUND (X.ELAPSED_TIME / 1000000 / X.EXECUTIONS_DELTA, 3) AVG_ELAPSED_TIME_SEC,
         ROUND (X.CPU_TIME / 1000000 / X.EXECUTIONS_DELTA, 3) AVG_CPU_TIME_SEC, 
         ROUND (X.BUFFER_GETS_DELTA / X.EXECUTIONS_DELTA, 3) AVG_BUFFER_GETS,  
         ROUND (X.PARSE_CALLS_DELTA/X.EXECUTIONS_DELTA*100, 3) EXEC_PARSE_RATE,
         ROUND (X.PHYSICAL_READ_BYTES_DELTA/1024/X.EXECUTIONS_DELTA, 3) AVG_PHYSICAL_READ_KB, 
         ROUND (X.DISK_READS_DELTA / X.EXECUTIONS_DELTA, 3) AVG_DISK_READS,      
         EXECUTIONS_DELTA AS EXEC_TOTAL_NUM,DHST.COMMAND_TYPE,N.COMMAND_NAME        
    FROM DBA_HIST_SQLTEXT DHST, DBA_HIST_SQLCOMMAND_NAME    N,  
         (  
          SELECT DHSS.SQL_ID SQL_ID,
                 SUM (DHSS.CPU_TIME_DELTA) CPU_TIME,   
                 SUM (DHSS.ELAPSED_TIME_DELTA) ELAPSED_TIME,   
                 CASE SUM (DHSS.EXECUTIONS_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.EXECUTIONS_DELTA) END AS EXECUTIONS_DELTA,
                 CASE SUM (DHSS.SORTS_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.SORTS_DELTA) END AS SORTS_DELTA,     
                 CASE SUM (DHSS.FETCHES_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.FETCHES_DELTA) END AS FETCHES_DELTA,
                 CASE SUM (DHSS.PARSE_CALLS_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.PARSE_CALLS_DELTA) END AS PARSE_CALLS_DELTA,
                 CASE SUM (DHSS.DISK_READS_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.DISK_READS_DELTA) END AS DISK_READS_DELTA,
                 CASE SUM (DHSS.BUFFER_GETS_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.BUFFER_GETS_DELTA) END AS BUFFER_GETS_DELTA,
                 CASE SUM (DHSS.IOWAIT_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.IOWAIT_DELTA) END AS IOWAIT_DELTA,
                 CASE SUM (DHSS.PHYSICAL_READ_BYTES_DELTA) WHEN 0 THEN 1 ELSE SUM (DHSS.PHYSICAL_READ_BYTES_DELTA) END AS PHYSICAL_READ_BYTES_DELTA                                                                                                                                                                                         
            FROM DBA_HIST_SQLSTAT DHSS 
           WHERE DHSS.SNAP_ID IN   
                (SELECT SNAP_ID   
                   FROM DBA_HIST_SNAPSHOT   
                  WHERE BEGIN_INTERVAL_TIME >= TRUNC(SYSDATE)-30
                    AND END_INTERVAL_TIME <TRUNC(SYSDATE)-0  
                ) 
           AND DHSS.PARSING_SCHEMA_NAME =UPPER('SHARK')                      
          GROUP BY DHSS.SQL_ID
          ) X 
   WHERE X.SQL_ID = DHST.SQL_ID   
     AND DHST.COMMAND_TYPE = N.COMMAND_TYPE 
)
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_DISK_READS AS VALUE_S, 'AVG_DISK_READS' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%' ORDER BY AVG_DISK_READS DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_ELAPSED_TIME_SEC AS VALUE_S, 'AVG_ELAPSED_TIME_SEC' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY AVG_ELAPSED_TIME_SEC DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_CPU_TIME_SEC AS VALUE_S, 'AVG_CPU_TIME_SEC' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY AVG_CPU_TIME_SEC DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_BUFFER_GETS AS VALUE_S, 'AVG_BUFFER_GETS' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY AVG_BUFFER_GETS DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, EXEC_PARSE_RATE AS VALUE_S, 'EXEC_PARSE_RATE' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY EXEC_PARSE_RATE DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_PHYSICAL_READ_KB AS VALUE_S, 'AVG_PHYSICAL_READ_KB' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47 ORDER BY AVG_PHYSICAL_READ_KB DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, EXEC_TOTAL_NUM AS VALUE_S, 'EXEC_TOTAL_NUM' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE<>47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY EXEC_TOTAL_NUM DESC ) WHERE ROWNUM <=5
UNION ALL 
SELECT * FROM 
(
SELECT SQL_FULL_TEXT,SQL_ID,EXEC_TOTAL_NUM, AVG_ELAPSED_TIME_SEC AS VALUE_S, 'PROCEDURES_EXEC_TIME' AS VALUES_TYPE 
FROM BASTABLE WHERE COMMAND_TYPE=47  AND SQL_FULL_TEXT NOT LIKE '/* SQL A%'  ORDER BY AVG_ELAPSED_TIME_SEC DESC ) WHERE ROWNUM <=5;


<think>好的,我现在需要帮助用户解决关于Oracle数据库性能分析工具和方法的问题。首先,用户提到他们想进行Oracle数据库性能分析,询问相关的工具和方法。根据用户提供的引用,里面提到了Statspack和AWR,我需要详细解释这些工具,以及可能还有其他相关工具如ASH、ADDM和SQL Tuning Advisor。 首先,我应该确认用户可能使用的是哪个版本的Oracle数据库,因为不同的版本推荐的工具有所不同。比如,Statspack在8i到9i常用,而10g及以后推荐使用AWR。但用户引用中提到了Statspack在9i是必用的,之后版本兼容,但建议用AWR替代。所以需要区分不同版本的工具推荐。 接下来,我需要列出主要的性能分析工具,包括AWR、Statspack、ASH、ADDM、Enterprise Manager等。每个工具需要简要说明其功能、使用方法和适用场景。例如,AWR自动生成性能快照,而Statspack需要手动安装和配置。同时,ASH适合实时分析,ADDM提供自动诊断建议。 另外,用户可能需要知道如何访问这些工具的报告,比如通过SQL*Plus运行脚本生成AWR报告,或者使用OEM的图形界面。还需要提到一些常用的动态性能视图,比如v$session、v$sql等,这些对于实时监控SQL性能很有帮助。 然后,用户可能需要性能分析的步骤,比如确定分析范围、收集数据、生成报告、分析关键指标等。这里要分步骤说明,每个步骤的具体操作和工具使用。 同时,注意事项也很重要,比如快照时间间隔、权限要求、存储考虑等。这些可以帮助用户避免常见问题,比如数据覆盖或权限不足。 最后,生成相关问题需要考虑用户可能的后续问题,比如工具的比较、具体工具的使用方法、权限管理、数据存储位置以及结合其他工具如OS监控工具的使用。 需要确保回答结构清晰,分点列出,使用正确的LaTeX格式,并且引用用户提供的引用内容,末尾添加相关问题。同时,保持语言口语化,避免技术术语过于复杂,让用户容易理解。</think>### Oracle数据库性能分析工具与方法 #### 一、核心工具 1. **AWR(Automatic Workload Repository)** - **功能**:自动收集、处理和维护数据库性能数据,生成基于时间段的性能报告[^1]。 - **使用方法**: ```sql -- 生成AWR报告 @$ORACLE_HOME/rdbms/admin/awrrpt.sql ``` - **关键指标**:`DB Time`、`Top SQL`、`等待事件(Wait Events)`。 2. **Statspack(兼容旧版本)** - **适用场景**:Oracle 9i及之前版本,或无法使用AWR时[^1]。 - **配置步骤**: ```sql @$ORACLE_HOME/rdbms/admin/spcreate.sql -- 安装 exec statspack.snap; -- 手动生成快照 @$ORACLE_HOME/rdbms/admin/spreport.sql -- 生成报告 ``` 3. **ASH(Active Session History)** - **功能**:实时跟踪活动会话的等待事件,用于短期性能问题诊断。 - **查询示例**: ```sql SELECT * FROM v$active_session_history WHERE sample_time > SYSDATE - 1/24; ``` 4. **ADDM(Automatic Database Diagnostic Monitor)** - **特点**:基于AWR数据自动分析性能瓶颈,提供优化建议。 - **报告生成**: ```sql @$ORACLE_HOME/rdbms/admin/addmrpt.sql ``` 5. **Enterprise Manager (OEM)** - **图形化操作**:通过`Performance Hub`查看实时性能仪表盘,支持钻取分析SQL、会话和资源争用。 --- #### 二、性能分析步骤 1. **确定分析范围** - 明确问题类型(如CPU瓶颈、I/O延迟、锁争用)和时间范围。 2. **收集数据** - 使用AWR/Statspack生成报告,或通过ASH抓取实时会话数据。 3. **分析关键指标** - **等待事件**:如`db file sequential read`(索引扫描等待)、`enq: TX - row lock contention`(行锁争用)。 - **SQL性能**:通过`Top SQL`分析高负载或低效SQL语句,例如: ```sql SELECT sql_id, executions, elapsed_time/1e6 "Elapsed(s)" FROM v$sqlstats ORDER BY elapsed_time DESC; ``` 4. **优化与验证** - 根据ADDM建议调整参数(如`SGA_SIZE`)、优化SQL或重建索引。 - 使用`SQL Tuning Advisor`自动化SQL调优: ```sql DECLARE task_name VARCHAR2(30); BEGIN task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => 'abc123'); DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name); END; ``` --- #### 三、辅助工具与技巧 1. **动态性能视图** - `v$session`:实时会话状态(阻塞、等待事件)。 - `v$sql_plan`:SQL执行计划分析。 2. **OS工具集成** - 结合`vmstat`(Linux)或`PerfMon`(Windows)监控操作系统级资源(CPU、内存、磁盘I/O)。 3. **自定义监控** - 创建基线(Baseline)对比性能变化: ```sql EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE( start_snap_id => 100, end_snap_id => 200, baseline_name => 'Peak_Load'); ``` --- #### 四、注意事项 1. **快照间隔**:默认AWR每小时采集一次,高负载时可临时调整为15分钟。 2. **权限要求**:使用AWR/ADDM需`DBA`角色或`SELECT_CATALOG_ROLE`。 3. **存储管理**:AWR数据保留期默认为8天,可通过`DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS`调整。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值