首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 效能調優五大面向:從外部環境到內部競爭

     編輯:Oracle 資料庫基礎

調優核心原則

Oracle 不獨立運行,效能受限於外部資源。優先驗證 CPU、記憶體、網路無瓶頸,再進行資料庫層面調優,否則事倍功半。

一、外部環境調優

資源瓶頸徵兆對策
CPU執行佇列長度 > CPU 核心數增加 CPU、關閉 Parallel Query 等高耗 CPU 功能
記憶體發生分頁,交換區頻繁讀寫增加實體記憶體、縮減 SGA、關閉 MTS(多執行緒伺服器)
網路大量 Net8 通訊延遲優化應用端連線池、啟用 SDU/ TDU 調整、檢查防火牆/交換器延遲

監控工具:vmstat、glance、top、sar。

二、Row Resequencing(列重排序)— 減少磁碟 I/O

磁碟 I/O 比記憶體慢 10,000 倍。若交易透過 Primary Key 索引範圍掃描存取表,將表資料依 PK 順序物理重排,可大幅減少區塊讀取。

實例

SELECT salary FROM employee WHERE last_name LIKE 'B%';
  • 未重排:100 筆資料分散不同區塊 → 100+ 實體讀取。
  • 重排後:資料集中 2-3 個區塊 → 1 次索引讀 + 2 次資料區塊讀 = 3 次 I/O。

判斷依據

查詢 DBA_INDEXES.CLUSTERING_FACTOR:

  • 接近區塊數 → 順序佳。
  • 接近列數 → 順序差,需重排。

重排工具

  1. CREATE TABLE new_tbl AS SELECT * FROM old_tbl ORDER BY pk_col (CTAS)
  2. Oracle 9i 內建表重組工具

適用場景:高容量 OLTP、索引範圍掃描、連續 Key 多筆查詢。隨機單筆 PK 存取無效益。

三、SQL 調優

佔調優工作 90%,核心四準則:

  1. 消除不必要的大表全表掃描:有序表回傳 <40% 列、無序表 <7% 列 → 改用索引。手段:建立 B-tree/Bitmap/Function-based 索引、或加 Hint 強制索引。
  2. 小表全表掃描快取化:Oracle 7 用 ALTER TABLE ... CACHE,8i+ 強制放入 KEEP Pool。
  3. 確保最優索引使用:多索引可選時,驗證執行計畫是否挑選正確索引。
  4. 確保最優 Join 方法:Nested Loop / Hash Join / Sort-Merge Join 視資料量與索引而定。

四、排序調優

排序觸發情境:ORDER BY、GROUP BY、CREATE INDEX、索引不足導致 Merge Sort。

  • 專用連線:PGA 分配 SORT_AREA_SIZE。
  • 共享伺服器:Large Pool 分配。
  • 記憶體不足 → 臨時表空間磁碟排序,慢 ~14,000 倍。

關鍵參數:SORT_AREA_SIZE、SORT_AREA_RETAINED_SIZE。目標:避免磁碟排序,同時避免過度浪費記憶體。

五、競爭調優

核心參數:PCTFREE、PCTUSED、FREELISTS、FREELIST GROUPS。

黃金法則:

  1. PCTUSED 確保區塊能容納至少一列,否則產生「死區塊」拖慢效能。
  2. 出現 Chained Row → PCTFREE 過低或 DB_BLOCK_SIZE 過小。
  3. 高併發 INSERT 表:FREELISTS = 最大併發 INSERT 進程數。
  4. FREELIST GROUPS 僅對 RAC/Parallel Server 有效,設為實例數。

總結

調優順序:外部資源 → I/O 減少 → SQL → 排序 → 競爭參數。每層解決後再進入下一層,避免無效投入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數控制行為高效能設定高空間重用設定
PCTFREE區塊從 Freelist 移出門檻(保留空間供更新)較高(如 20-30%)較低(如 10%)
PCTUSED區塊重回 Freelist 門檻較低(如 20-30%)較高(如 60-80%)