如何查询Oracle性能监控

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查询Oracle性能监控相关的知识,希望对你有一定的参考价值。

可以通过生成数据库性能报告查看数据库性能

数据库版本:oracle 9i
statspack
SQL> conn perfstat/perfstat

SQL> execute statspack.snap

SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql

数据库版本:oracle 10g,11g

awr
SQL> execute dbms_workload_repository.create_snapshot;

SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
参考技术A

    临时表空间使用情况的查看

    命令:
      Select
      f.tablespace_name
      ,sum(f.bytes_free + f.bytes_used)
      /1024/1024/1024 "total GB"
      ,sum((f.bytes_free + f.bytes_used) - nvl(p.bytes_used, 0))
      /1024/1024/1024 "Free GB"
      ,sum(nvl(p.bytes_used, 0))
      /1024/1024/1024 "Used GB"
      from sys.v_$temp_space_header f, dba_temp_files d, sys.v_$temp_extent_pool p
      where f.tablespace_name(+) = d.tablespace_name
      and f.file_id(+) = d.file_id
      and p.file_id(+) = d.file_id
      group by
      f.tablespace_name
      
      2.使用临时表空间的SQL的查看
      
      Select se.username,
      se.sid,
      su.extents,
      su.blocks * to_number(rtrim(p.value)) as Space,
      tablespace,
      segtype,
      sql_text
      from v$sort_usage su, v$parameter p, v$session se, v$sql s
      where p.name = 'db_block_size'
      and su.session_addr = se.saddr
      and s.hash_value = su.sqlhash
      and s.address = su.sqladdr
      order by se.username, se.sid
      
      3.收缩临时表空间
      
      alter tablespace temp shrink space;
      
      alter tablespace temp shrink tempfile ''
      
      4.重建索引
      
      alter index PK_CROSSRELATION rebuild;
      
      5.在查看表空间使用情况
      
      SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
      D.TOT_GROOTTE_MB "表空间大小(M)",
      D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
      TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%' "使用比",
      F.TOTAL_BYTES "空闲空间(M)",
      F.MAX_BYTES "最大块(M)"
      FROM (SELECT TABLESPACE_NAME,
      ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
      ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
      FROM SYS.DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME) F,
      (SELECT DD.TABLESPACE_NAME,
      ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
      FROM SYS.DBA_DATA_FILES DD
      GROUP BY DD.TABLESPACE_NAME) D
      WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
      ORDER BY 1;
      
      6.表空间的总容量的查询
      
      select tablespace_name, sum(bytes) / 1024 / 1024 as MB
      from dba_data_files
      group by tablespace_name;
      
      7. 表空间使用率的查询
      
      select total.tablespace_name,
      round(total.MB, 2) as Total_MB,考试大论坛
      round(total.MB - free.MB, 2) as Used_MB,
      round((1 - free.MB / total.MB) * 100, 2) || '%' as Used_Pct
      from (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
      from dba_free_space
      group by tablespace_name) free,
      (select tablespace_name, sum(bytes) / 1024 / 1024 as MB
      from dba_data_files
      group by tablespace_name) total
      where free.tablespace_name = total.tablespace_name;
      
      8. 当前表级锁的SQL的查询如下:
      
      select sess.sid,
      sess.serial#,
      lo.oracle_username,
      lo.os_user_name,
      ao.object_name,
      lo.locked_mode
      from v$locked_object lo,
      dba_objects ao,
      v$session sess
      where ao.object_id = lo.object_id and lo.session_id = sess.sid;
      
      杀掉锁表进程:
      alter system kill session '436,35123';
      
      
      9.监控当前数据库谁在运行什么SQL语句
      select osuser, username, sql_text
      from v$session a, v$sqltext b
      where a.sql_address =b.address order by address, piece;
      
      
      10.找使用CPU多的用户session
      select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value
      from v$session a,v$process b,v$sesstat c
      where c.statistic#=12 and
      c.sid=a.sid and
      a.paddr=b.addr
      order by value desc;
      
      11.死锁信息的查看
      SELECT (SELECT username
      FROM v$session
      WHERE SID = a.SID) blocker, a.SID, 'is blocking',
      (SELECT username
      FROM v$session
      WHERE SID = b.SID) blockee, b.SID
      FROM v$lock a, v$lock b
      WHERE a.BLOCK = 1 AND b.request > 0 AND a.id1 = b.id1 AND a.id2 = b.id2;
      
      12.具有最高等待的对象
      SELECT o.OWNER,o.object_name, o.object_type, a.event,
      SUM (a.wait_time + a.time_waited) total_wait_time
      FROM v$active_session_history a, dba_objects o
      WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
      AND a.current_obj# = o.object_id
      GROUP BY o.OWNER,o.object_name, o.object_type, a.event
      ORDER BY total_wait_time DESC;
      
      
      13.查看具有最高等待的对象
      
      SELECT a.session_id, s.osuser, s.machine, s.program, o.owner, o.object_name,
      o.object_type, a.event,
      SUM (a.wait_time + a.time_waited) total_wait_time
      FROM v$active_session_history a, dba_objects o, v$session s
      WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
      AND a.current_obj# = o.object_id
      AND a.session_id = s.SID
      GROUP BY o.owner,
      o.object_name,
      o.object_type,
      a.event,
      a.session_id,
      s.program,
      s.machine,
      s.osuser
      ORDER BY total_wait_time DESC;
      
      14.查看等待最多的SQL
      
      SELECT a.program, a.session_id, a.user_id, d.username, s.sql_text,
      SUM (a.wait_time + a.time_waited) total_wait_time
      FROM v$active_session_history a, v$sqlarea s, dba_users d
      WHERE a.sample_time BETWEEN SYSDATE - 30 / 2880 AND SYSDATE
      AND a.sql_id = s.sql_id
      AND a.user_id = d.user_id
      GROUP BY a.program, a.session_id, a.user_id, s.sql_text, d.username;
      
      15.显示正在等待锁的所有会话
      
      SELECT * FROM DBA_WAITERS;


参考学习:http://www.wyzc.com/Course/Course/showAction/id/13765?tg=pQoVyAEi8

使用SQL查询监控Oracle性能

我想问几个关于Oracle监控的问题。我可以使用SQL查询获取监视数据,如CPU利用率,RAM利用率,HDD空间,表空间等。我是否需要使用特权用户或我可以使用每个Oracle用户?如果不可能,有哪些替代方案?

答案

根据您提到的内容,我认为只应使用查询监控表空间使用情况。 (在这里查看非常好的查询:Find out free space on tablespace

应该在操作系统级别监视CPU和文件系统(异常可能是ASM,其中查询可能比ASM控制台更容易使用)。

如果要监视单个会话的使用情况,则需要访问数据字典的权限,例如v$sql_workarea_activev$session获取会话或查询的RAM使用,或v$session_wait获取等待等信息。我不知道您希望监控的是什么,但Oracle文档是您的朋友,可以找到有关这些词典的信息。

我所知道的最佳解决方案是使用Oracle Enterprise Manager,您可以轻松监控所有指标并创建自己的指标。

您还可以使用Zabbix(或您选择的其他)等开源工具实现自己的指标监控。这也是便宜得多的方式。

另一答案

Oracle具有性能视图,我们将从中获取有关Oracle数据库性能的信息。

要回答您的问题,您可以使用SQL查询查询v $ osstat视图以获取有关CPU利用率,RAM利用率,HDD等的信息.Official Oracle documentation on v$osstat

Image of query and result

还有很多其他视图,尤其是v $ sysstat,v $ sqlstat,v $ sys_time_model,v $ metric,您可以在其中挖掘大量与性能相关的信息。您可以参考以下链接,查看可以在Oracle中查询的所有基本指标

Oracle Metrics List by Don Burleson

以上是关于如何查询Oracle性能监控的主要内容,如果未能解决你的问题,请参考以下文章

使用SQL查询监控Oracle性能

ORACLE常用性能监控SQL

oracle AWR性能监控报告生成方法

ORACLE常用性能监控SQL

大开测试:性能-如何实现对数据服务器的监控(连载24)

oracle vm server怎么监控虚拟机性能