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

解決 HIS 叢集系統效能問題一例:ALL_SYNONYMS 視圖變更導致效能暴跌

     編輯:Oracle 資料庫基礎

案例背景

  • 醫院 HIS 系統:Windows 2000 + Oracle 9.2.0.1 (32-bit) 升級為 IBM P55A (AIX 64-bit) + Oracle 10.2.0.1 RAC。
  • 客戶端從 550 台增至 800+ 台,業務高峰期叢集頻繁死機,效能嚴重下降。

問題分析

  1. AWR 報告 顯示 Top 5 SQL 均為:
    SELECT OWNER, SYNONYM_NAME FROM SYS.ALL_SYNONYMS
    WHERE OWNER = 'PUBLIC' AND SYNONYM_NAME = '表名稱'
  2. 對比 Oracle 9.2.0.1 與 10.2.0.3 的 SYS.ALL_SYNONYMS 視圖定義,發現 10g 新增 UNION 部分,引入 sys."_ALL_SYNONYMS_TREE" 以支援同義詞鏈結(避免 9i 同義詞遞迴 Bug)。
  3. set autotrace traceonly 對比執行計畫,10g 版本效率較 9i 差數十倍。HIS 所有表皆建有同義詞,所有存取經由同義詞,故確定為根因。

嘗試解決方案

方案一:「移花接木」建立私有同義詞覆蓋系統視圖

CREATE OR REPLACE FORCE VIEW sys.ALL_SYNONYMS_9201 AS ( ... 9.2.0.1 定義 ... );
CREATE SYNONYM puba.ALL_SYNONYMS FOR SYS.ALL_SYNONYMS_9201;

測試工具 (SQL*Plus, PL/SQL) 有效,但 HIS 應用 (PowerBuilder) 繞過私有同義詞直接存取系統視圖,效能無改善。

方案二:直接修改系統視圖定義(經 Oracle 官方確認可行)

  • 與 Oracle 支援溝通,確認:若系統未使用「同義詞的同義詞」,可安全移除 10g 新增的 UNION 部分,還原 9i 定義。
  • 執行修改後,高峰期兩節點 CPU 負載從 80-90% 驟降至 20-30%,所有功能效能顯著提升,問題徹底解決。

經驗總結

  • 升級跨度大時,系統視圖定義變更可能帶來劇烈效能影響。
  • 善用 AWR/Statspack 定位 Top SQL,對比執行計畫找出根因。
  • 修改內部系統物件風險高,務必與廠商溝通確認後再執行。
  • 軟體層面問題機率往往大於硬體,抓住關鍵點可事半功倍。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved