如何查询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_active
和v$session
获取会话或查询的RAM使用,或v$session_wait
获取等待等信息。我不知道您希望监控的是什么,但Oracle文档是您的朋友,可以找到有关这些词典的信息。
我所知道的最佳解决方案是使用Oracle Enterprise Manager,您可以轻松监控所有指标并创建自己的指标。
您还可以使用Zabbix(或您选择的其他)等开源工具实现自己的指标监控。这也是便宜得多的方式。
Oracle具有性能视图,我们将从中获取有关Oracle数据库性能的信息。
要回答您的问题,您可以使用SQL查询查询v $ osstat视图以获取有关CPU利用率,RAM利用率,HDD等的信息.Official Oracle documentation on v$osstat
还有很多其他视图,尤其是v $ sysstat,v $ sqlstat,v $ sys_time_model,v $ metric,您可以在其中挖掘大量与性能相关的信息。您可以参考以下链接,查看可以在Oracle中查询的所有基本指标
Oracle Metrics List by Don Burleson
以上是关于如何查询Oracle性能监控的主要内容,如果未能解决你的问题,请参考以下文章