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

Oracle 作業系統層優化與資源管理器:記憶體、CPU、I/O、安全稽核全攻略

     編輯:Oracle 資料庫基礎

資料庫效能不僅取決於 SQL 調校,作業系統層面的資源配置、安全設定與 Oracle Resource Manager 的協同運作同樣關鍵。本文系統梳理 OS 優化順序、關鍵指標、安全稽核清單,並詳細解析 Resource Manager 三大元件與配置實戰。

一、 作業系統優化核心原則

1. 優化順序鐵律:記憶體 → I/O → CPU

三者相互影響,記憶體不足導致 Swap 暴增,拖垮 I/O 進而推高 CPU 等待。

2. 關鍵健康指標

3. 虛擬記憶體與 Raw Device

  • OS 以 4K/8K Page 管理虛擬記憶體,MMU 映射至實體 RAM
  • Raw Device 繞過檔案系統快取,某平台可提升 I/O;**Windows 平台無效**(NT 本身不使用檔案系統快取)

二、 伺服器安全稽核清單(生產環境必做)

1. UNIX/Linux 帳號與密碼

  • 啟用 /etc/shadow 機制,設定 /etc/default/passwd:MAXWEEKS、MINWEEKS、PASSLENGTH
  • 定期輪換關鍵帳號密碼:root、oraprod、applprod、appprod

2. 遠端登入管控

  • **嚴禁** .rhosts / hosts.equiv 信任關係,生產/測試環境隔離
  • 強制 SSH 金鑰認證,停用密碼登入

3. FTP 服務強化

  • /etc/ftpusers 加入 root、oraprod、applprod、appprod 禁止 FTP
  • 需上傳 Patch 時臨時開放,事後立即關閉

4. 系統日誌審計

  • 定期檢查 /var/adm/messages、/var/adm/sulog、/etc/syslog.conf
  • 建立自動化異常登入告警腳本

5. 資料庫與應用帳號安全

  • 修改 $ORACLE_HOME/.profile 權限為 500,防環境變數洩漏
  • 立即修改 SYS 預設密碼 change_on_install
  • 定期輪換 SYS、SYSTEM、APPS 密碼
  • 啟用應用使用者密碼過期/鎖定策略(Profile 控制)
  • 禁止共用帳號,實施一人一帳、權限最小化

6. 關鍵日誌輪轉與清理

指標建議閾值監控工具
CPU 總使用率< 90%vmstat, sar, top, AWR
OS/User 進程時間比40/60vmstat (sy/us)
多核負載均衡各核差距 < 10%mpstat -P ALL
記憶體分頁/交換pi/po ≈ 0vmstat, sar -W
磁碟服務時間< 20ms (SSD < 2ms)iostat -x

7. 控制檔多重鏡像

至少 3 份控制檔分置不同磁碟/控制器:CONTROL_FILES = ('/disk1/ctl1.ctl','/disk2/ctl2.ctl','/disk3/ctl3.ctl')

8. 網路安全:禁用遠端 INTERNAL 登入

REMOTE_LOGIN_PASSWORDFILE = NONE  -- init.ora/spfile

三、 Oracle Resource Manager (DBRM) 架構與實戰

DBRM 讓 DBA 在資料庫層面管控 CPU、並行度、Undo 等資源,實現混合負載隔離。

三大核心物件

元件日誌路徑範例清理頻率
Alert/Trace$ORACLE_HOME/admin/bdump/alert_*.log, udump/*.trc每週
Apache/u01/prodora/iAS/Apache/apache/logs/access_log, error_log每日輪轉
Listener/SQL*Net$ORACLE_HOME/network/log/listener.log, sqlnet.log每月

典型配置範例:OLTP + 批次報表隔離

-- 1. 建立消費者群組
BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
    consumer_group => 'OLTP_GRP', comment => '線上交易優先');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
    consumer_group => 'BATCH_GRP', comment => '批次報表低優先');
END;
/

-- 2. 建立計畫與指令
BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(plan => 'DAY_PLAN', comment => '白天混合負載');
  -- OLTP 獲 70% CPU 第一優先級
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAY_PLAN', group_or_subplan => 'OLTP_GRP',
    mgmt_p1 => 70, switch_time => 60, switch_group => 'BATCH_GRP');
  -- 批次獲 30% CPU,超時 60 秒降級
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAY_PLAN', group_or_subplan => 'BATCH_GRP',
    mgmt_p1 => 30);
  -- 其他/維護
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'DAY_PLAN', group_or_subplan => 'OTHER_GROUPS',
    mgmt_p1 => 10);
END;
/

-- 3. 驗證並啟用
EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DAY_PLAN';

映射使用者至群組

-- 登入觸發器自動映射
CREATE OR REPLACE TRIGGER set_res_group_after_logon
AFTER LOGON ON DATABASE
BEGIN
  IF USER IN ('OLTP_USER1','OLTP_USER2') THEN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
      DBMS_RESOURCE_MANAGER.ORACLE_USER, USER, 'OLTP_GRP');
  ELSIF USER IN ('BATCH_USER') THEN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
      DBMS_RESOURCE_MANAGER.ORACLE_USER, USER, 'BATCH_GRP');
  END IF;
END;

四、 總結

  1. OS 層建立「記憶體充足、I/O 無瓶頸、CPU 均衡」的基礎環境
  2. 落實安全稽核清單,建立自動化巡檢機制
  3. 啟用 Resource Manager,以 Consumer Group/Plan/Directive 三層模型實現業務級資源隔離
  4. 定期檢視 V$RSRC_CONSUMER_GROUP、V$RSRC_PLAN 驗證資源分配效果

OS 與資料庫資源管理雙管齊下,才能在混合負載環境下保障核心業務 SLA。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
物件功能關鍵屬性
Resource Consumer Group同類資源需求使用者群組CPU_P1~P8, PARALLEL_DEGREE_LIMIT_P1, UNDO_POOL
Resource Plan資源分配方案(含指令集)ACTIVE_SESS_POOL_P1, QUEUEING_P1, MAX_EST_EXEC_TIME
Resource Plan Directive將 Plan 連結 Group/Subplan 並分配資源MGMT_P1~P8 (百分比), SWITCH_TIME, SWITCH_GROUP