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')