關於oracle數據庫性能監控指標

1. 當前連接會話數以及當前併發連接個數

-- 當前活躍用戶會話數
Select count(*) from v$session  where status='ACTIVE' and USERNAME is not null;
-- 當前活躍系統會話數
Select count(*) from v$session  where USER# = 0;
-- 當前非活躍會話數
Select count(*) from v$session  where status='INACTIVE'

2. 表空間利用率(各個表空間的大小以及使用情況)

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;

3. Oracle IOPS(每秒的IO)和吞吐量

     網上給出的答案是這樣的

SELECT
		sum(decode( name, 'physical read IO requests', value, 'physical write IO requests', value, 0 )) AS iops,
		sum(decode( name, 'physical read bytes', value, 'physical write bytes', value, 0 )) / 1024 / 1024 AS mbps
FROM v$sysstat
WHERE name IN 
(
	'physical read IO requests',
	'physical write IO requests',
	'physical read bytes',
	'physical read total bytes',
	'physical write bytes',
	'physical write total bytes',
	'physical read total IO requests',
	'physical write total IO requests'
);

   我對這個答案有一些疑惑,如果是物理io請求,那麼這樣得到的是io的總數,而不是每秒的io啊,另一個方法請看第 18 條

4.碎片程度

SELECT
	tablespace_name,
	round( sqrt( max( blocks ) / sum( blocks )) * ( 100 / sqrt( sqrt( count( blocks )))), 2 ) FSFI 
FROM
	dba_free_space 
GROUP BY
	tablespace_name 
ORDER BY
	1;

5.高速緩存命中率

-- 高速緩存命中率
SELECT NAME, PHYSICAL_READS, DB_BLOCK_GETS, CONSISTENT_GETS,

1 - (PHYSICAL_READS / (DB_BLOCK_GETS + CONSISTENT_GETS)) "Hit Ratio"

FROM V$BUFFER_POOL_STATISTICS

WHERE NAME='DEFAULT';
-- 或者 
SELECT
physical_reads,
db_block_gets,
consistent_gets,
NAME,
100 * (1 - (physical_reads / ( consistent_gets + db_block_gets - physical_reads ))) "Data Buffer Hit Ratio"
FROM v$buffer_pool_statistics;

-- 共享池命中率
select sum(pinhits-reloads)/sum(pins)*100 "hit radio" from v$librarycache;

-- 共享區字典緩衝區命中率

select sum(gets-getmisses-usage-fixed)/sum(gets) from v$rowcache;

-- 共享區緩存命中率
select sum(pins-reloads)/sum(pins) from v$librarycache;

-- 已經被包含在5裏面

6.庫高速緩存命中率

 

SELECT
	TO_CHAR(
	ROUND(( 1 - SUM( getmisses ) / SUM( gets )) * 100, 1 )) || '%' "Dictionary Cache Hit Ratio" 
FROM
	v$rowcache;

7.字典緩存命中率

SELECT
	sum( gets - getmisses - usage - fixed ) / sum( gets )    
FROM
	v$rowcache;

8.空閒的共享池內存

SELECT
	* 
FROM
	V$SGASTAT 
WHERE
	NAME = 'free memory' 
	AND POOL = 'shared pool';

9.共享池使用率

SELECT
	(
	1 - ROUND(
	BYTES / ( select sum(value) "total sga MB" from v$sga ), 2 
	)
	) * 100 || '%' 
FROM
	V$SGASTAT 
WHERE
	NAME = 'free memory' 
	AND POOL = 'shared pool';

10.數據庫服務啓動時間

select * from sys.v_$instance

11.共享緩衝池中重做日誌命中率

SELECT
	name,
	gets,
	misses,
	immediate_gets,
	immediate_misses,
	Decode( gets, 0, 0, misses / gets * 100 ) ratio1,
	Decode( immediate_gets + immediate_misses, 0, 0, immediate_misses / ( immediate_gets + immediate_misses ) * 100 ) ratio2 
FROM
	v$latch 
WHERE
	name IN ( 'redo allocation', 'redo copy' );

12.當前oracle所有進程執行進度

   當前進程的數量

select count(*) from v$process;
SELECT A.USERNAME,
       A.TARGET,
       A.SID,
       a.SERIAL#,
       A.OPNAME,
       ROUND(A.SOFAR * 100 / A.TOTALWORK, 0) || '%' AS "執行進度",
       A.TIME_REMAINING "剩餘秒數",
       TRUNC(A.TIME_REMAINING / 60, 2) "剩餘分鐘",
       TRUNC(A.TIME_REMAINING / 60/60, 2) "剩餘小時",
       B.SQL_TEXT "執行SQL",
       B.LAST_ACTIVE_TIME "開始時間"
  FROM V$SESSION_LONGOPS A, V$SQLAREA B
 WHERE A.TIME_REMAINING <> 0
   AND A.SQL_ADDRESS = B.ADDRESS
   AND A.SQL_HASH_VALUE = B.HASH_VALUE

13.查詢SGA和PGA的使用情況

select name,
       round(total,2),
       round(total - free, 2) used,
       round(free, 2) free,
       round((total - free) / total * 100, 2) pctused
  from (select 'SGA' name,
               (select sum(value / 1024 / 1024) from v$sga) total,
               (select sum(bytes / 1024 / 1024)
                  from v$sgastat
                 where name = 'free memory') free
          from dual)
union
select name,
       round(total,2),
       round(used, 2) used,
       round(total - used, 2) free,
       round(used / total * 100, 2) pctused
  from (select 'PGA' name,
               (select value / 1024 / 1024 total
                  from v$pgastat
                 where name = 'aggregate PGA target parameter') total,
               (select value / 1024 / 1024 used
                  from v$pgastat
                 where name = 'total PGA allocated') used
          from dual);

13. 查看會話的內存佔用情況

SELECT server "連接類型",
       s.username "用戶名",
       OSUSEr "系統用戶",
       NAME,
       round(VALUE / 1024 / 1024 ,2) "佔用內存(M)",
       s.SID "會話ID",
       s.serial# 會話序列號,
       spid "系統進程ID",
       p.PGA_USED_MEM,
       p.PGA_ALLOC_MEM,
       p.PGA_FREEABLE_MEM,
       p.PGA_MAX_MEM
  FROM v$session s, v$sesstat st, v$statname sn, v$process p
 WHERE st.SID = s.SID
   AND st.statistic# = sn.statistic#
   AND sn.NAME LIKE 'session pga memory'
   AND p.addr = s.paddr
 ORDER BY VALUE DESC

14.查詢耗時最長的10條sql

select *
  from (select v.sql_id,
               v.child_number,
               v.sql_text,
               v.elapsed_time,
               v.cpu_time,
               v.disk_reads,
               rank() over(order by v.elapsed_time desc) elapsed_rank
          from v$sql v) a
 where elapsed_rank <= 10;

15.MTS

select busy/(busy+idle) shared_servers_busy from v$dispatcher

16.表級鎖

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;

17.正在等待鎖的所有會話

SELECT * FROM DBA_WAITERS;

18.TPS,QPS,MBPS

SELECT
	'Qps|' AS begin1,
	( SELECT sum( value ) FROM gv$sysmetric WHERE metric_name = 'I/O Requests per Second' ) AS b1,
	'|' AS end1,
	'Tps|' AS begin2,
	( SELECT sum( value ) FROM gv$sysmetric WHERE metric_name = 'User Transaction Per Sec' ) AS b2,
	'|' AS end2,
	'Mbps|' AS begin3,
	( SELECT sum( value ) FROM gv$sysmetric WHERE metric_name = 'I/O Megabytes per Second' ) AS b3,
	'|' AS end3 
FROM
	dual;

19.數據庫容量大小(GB)以及數據庫各個表空間大小

-- 數據庫總大小
SELECT ROUND(SUM(BYTES)/1024/1024/1024,2)||'GB' 
FROM DBA_DATA_FILES;
-- 數據庫各個表空間大小
select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;

20.審計信息

-- 具體的審計信息
select * from dba_audit_trail
-- 是否打開審計功能 (默認是未開啓,NONE表示未開啓,其他的應該就是開啓,比如 DB_EXTENDED)
SELECT * from v$parameter WHERE name = 'audit_trail'

21.當前數據庫的版本信息

SELECT * from v$version

22. 獲取不用用戶不同操作的審計執行頻率

SELECT
	username,
	action_name,
	count( * ) c 
FROM
	dba_audit_trail 
GROUP BY
	username,
	action_name 
ORDER BY
	c DESC

23.查詢不同用戶的連接數

SELECT
	username,
	count( username ) 
FROM
	v$session 
WHERE
	username IS NOT NULL 
GROUP BY
	username;

24.被鎖定或者已經過期的用戶

select username,lock_date from dba_users WHERE ACCOUNT_STATUS in ('LOCKED','EXPIRED & LOCKED')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章