整合V$SYSSTAT統計值,提供緩衝區、共享池、排序、Redo Log Buffer四大維度即時監控SQL與判讀標準。
SELECT a.value+b.value "Logical Reads", c.value "Physical Reads",
ROUND(100*((a.value+b.value)-c.value)/(a.value+b.value)) "Buffer Hit Ratio"
FROM v$sysstat a, v$sysstat b, v$sysstat c
WHERE a.statistic#=40 AND b.statistic#=41 AND c.statistic#=42;
-- statistic#: 40=db block gets, 41=consistent gets, 42=physical reads
-- 取得四個關鍵統計值
SELECT name, value FROM v$sysstat
WHERE name IN ('physical reads','physical reads direct',
'physical reads direct (lob)','consistent gets','db block gets');
-- 計算邏輯
X = physical reads direct + physical reads direct (lob)
Hit Ratio = 100 - (physical reads - X) / (consistent gets + db block gets - X) * 100
-- 判讀:< 90% 需關注,考慮增大DB_CACHE_SIZE或優化SQL
SELECT SUM(pinhits)/SUM(pins)*100 "Hit Ratio" FROM v$librarycache;
-- < 95% 需檢查:未使用綁定變數、字面量SQL泛濫、Shared Pool過小
SELECT name, value FROM v$sysstat WHERE name LIKE '%sort%';
-- 關鍵比率:sorts(disk) / (sorts(memory) + sorts(disk))
-- 比率過高 → SORT_AREA_SIZE/PGA_AGGREGATE_TARGET 偏小
SELECT name, value FROM v$sysstat
WHERE name IN ('redo entries','redo buffer allocation retries');
-- 關鍵比率:redo buffer allocation retries / redo entries
-- > 1% 考慮增大 LOG_BUFFER
#!/bin/bash
# daily_health_check.sh
sqlplus -s / as sysdba <