「以最少的磁碟 I/O 取得所需資料」
評估指標:回應時間 vs 吞吐量、可用性、緩衝區命中率、記憶體使用效率。
| 原則 | 說明 | 效益 |
|---|---|---|
| 表與索引分離 | 不同表空間、不同磁碟 | 並行 I/O、減少爭用 |
| 用戶表空間與 SYSTEM 分離 | 建立專用 USERS、DATA、INDEX 表空間 | 避免系統物件爭用 |
| 回滾段專用表空間 | UNDO 表空間獨立 | 防止長交易擠佔空間 |
| 臨時表空間獨立 | TEMP 表空間專供排序/Hash | 減少永久表空間碎片 |
| 資料檔分散於多磁碟 | 同一表空間多檔案跨磁碟 | I/O 負載均衡 |
LOG_ARCHIVE_DEST_n)。TRANSACTIONS / TRANSACTIONS_PER_ROLLBACK_SEGMENT (手動模式) 或啟用 UNDO_MANAGEMENT=AUTO。ORA-01555 Snapshot too old。SHARED_POOL_RESERVED_SIZE)。log file sync 等待,通常 1~10MB 足夠。PGA_AGGREGATE_TARGET (10g+) 自動管理。:b1,啟用 Cursor Sharing,減少 Hard Parse。SELECT *,減少網路傳輸與 Sort 區記憶體。(A,B),查詢需符合最左前綴原則。UPPER(name)='ABC' → 改用 Function-Based Index 或 name LIKE 'abc%'salary*12 > 100000 → 改寫 salary > 100000/12WHERE num_col = '123' → 字串轉數字導致索引失效IS NULL、NOT IN、!=、LIKE '%abc' 等vmstat 5, sar -p 10 10 監控。鎖定 SGA 記憶體 (LOCK_SGA=TRUE、HugePages)。| 元件 | 關鍵指標 | 目標值 | 查詢 SQL |
|---|---|---|---|
| Library Cache | Get Hit Ratio | > 90% | SELECT gethitratio FROM v$librarycache; |
| Reloads/Pins | < 1% | SELECT SUM(reloads)/SUM(pins) FROM v$librarycache; | |
| Dictionary Cache | Getmisses/Gets | < 15% | SELECT SUM(getmisses)/SUM(gets) FROM v$rowcache; |
| Buffer Cache | Hit Ratio | > 95% | SELECT 1-(phy.value/(cur.value+con.value)) FROM v$sysstat cur, v$sysstat con, v$sysstat phy WHERE cur.name='db block gets' AND con.name='consistent gets' AND phy.name='physical reads'; |
EXEC DBMS_SHARED_POOL.KEEP('PACKAGE_NAME');
EXEC DBMS_SHARED_POOL.KEEP('PROCEDURE_NAME');
-- 查詢大型匿名區塊轉為 Procedure
SELECT * FROM v$sqlarea WHERE command_type=47 AND LENGTH(sql_text) > 500;
AUTOEXTEND 或設定 MAXSIZE。EXTENT MANAGEMENT LOCAL AUTOALLOCATE,減少 Data Dictionary 爭用。DB_BLOCK_LRU_LATCHES, DML_LOCKS 依實際爭用調整。V$SQL_MONITOR, DBA_ADVISOR_RECOMMENDATIONS (SQL Access Advisor)。UTLBSTAT/UTLESTAT:區間統計報表STATSPACK / AWR (需診斷包):快照比較、Top SQL、等待事件DBMS_XPLAN、SQL TRACE (10046)、TKPROF效能優化是系統工程:設計階段決定上限,運行階段逼近上限。建立標準化開發規範、部署監控基線、定期 AWR/ASH 分析、持續迭代調優,才能讓 Oracle 資料庫長期維持高效穩定運行。