隨著 ARM 架構(gòu)服務(wù)器在成本、能耗上的優(yōu)勢凸顯,越來越多企業(yè)將 Oracle 數(shù)據(jù)庫遷移至 ARM 平臺,但卡頓、性能不達標問題頻繁出現(xiàn)。多數(shù)時候,這并非硬件算力不足,而是兼容性適配不到位。以下 3 個針對性優(yōu)化方案,可從系統(tǒng)、數(shù)據(jù)庫、補丁層面解決瓶頸,無需更換硬件即可顯著提升性能。
一、方案一:系統(tǒng)內(nèi)核參數(shù)適配優(yōu)化 —— 打通 ARM 與 Oracle 的 “底層銜接”
ARM 服務(wù)器默認內(nèi)核參數(shù)針對通用場景設(shè)計,與 Oracle 對內(nèi)存、IO、網(wǎng)絡(luò)的高需求不匹配,是卡頓的核心誘因之一。需通過參數(shù)調(diào)整,讓系統(tǒng)資源調(diào)度更貼合 Oracle 運行特性。
1. 核心優(yōu)化參數(shù)與配置邏輯
參數(shù)類別 | 關(guān)鍵參數(shù) | 優(yōu)化值建議 | 作用原理 |
內(nèi)存管理 | vm.swappiness | 10(默認 60) | 降低內(nèi)存交換頻率,避免 Oracle SGA 被頻繁換出到磁盤 |
內(nèi)存管理 | vm.nr_hugepages | 按 SGA 大小計算 | 啟用大頁內(nèi)存,減少 Oracle 內(nèi)存頁表切換開銷 |
IO 調(diào)度 | elevator(或io_scheduler) | mq-deadline | 優(yōu)化 ARM 存儲 IO 調(diào)度順序,提升 Oracle 隨機讀寫效率 |
網(wǎng)絡(luò)連接 | net.core.somaxconn | 65535(默認 128) | 增加 TCP 監(jiān)聽隊列上限,避免高并發(fā)時連接阻塞 |
進程資源限制 | fs.file-max | 655350(默認約 3 萬) | 提升系統(tǒng)最大文件句柄數(shù),適配 Oracle 多進程特性 |
2. 操作步驟(以 CentOS 8 ARM 版為例)
- 備份當前內(nèi)核參數(shù)配置:
cp /etc/sysctl.conf /etc/sysctl.conf.bak
- 編輯配置文件,添加 / 修改優(yōu)化參數(shù):
vi /etc/sysctl.conf
粘貼以下內(nèi)容(需根據(jù)服務(wù)器內(nèi)存調(diào)整nr_hugepages,例如 SGA=32G 時,vm.nr_hugepages=16384,按 2M 大頁計算):
vm.swappiness=10
vm.nr_hugepages=16384
net.core.somaxconn=65535
fs.file-max=655350
- 設(shè)置 IO 調(diào)度器(永久生效):
echo "mq-deadline" > /sys/block/sda/queue/scheduler(sda 為 Oracle 數(shù)據(jù)盤)
并在/etc/rc.d/rc.local添加該命令,避免重啟失效。
- 生效參數(shù):
sysctl -p
3. 注意事項
- nr_hugepages需預(yù)留 10%-20% 內(nèi)存給系統(tǒng),避免內(nèi)存溢出;
- IO 調(diào)度器需根據(jù)存儲類型調(diào)整(SSD 用mq-deadline,機械硬盤用cfq)。
二、方案二:Oracle 數(shù)據(jù)庫參數(shù)與 SQL 優(yōu)化 —— 適配 ARM 架構(gòu)特性
ARM 架構(gòu)的指令集、緩存結(jié)構(gòu)與 x86 不同,Oracle 默認參數(shù)(如 SGA/PGA 分配、進程數(shù))可能導(dǎo)致資源浪費或瓶頸,需針對性調(diào)整;同時,低效 SQL 在 ARM 上的性能損耗會被放大,需優(yōu)先優(yōu)化。
1. 數(shù)據(jù)庫核心參數(shù)優(yōu)化
參數(shù)名稱 | 優(yōu)化值建議(以 64G 內(nèi)存服務(wù)器為例) | 適配 ARM 的原理 |
sga_target | 32G(物理內(nèi)存 50%) | ARM 單節(jié)點內(nèi)存帶寬相對較低,避免 SGA 過大導(dǎo)致卡頓 |
pga_aggregate_target | 16G(SGA 的 50%) | 減少 ARM CPU 的上下文切換,提升并行查詢效率 |
processes | 1000(默認 300) | 適配 ARM 多核心特性,支持更多并發(fā)連接 |
parallel_max_servers | 32(CPU 核心數(shù)的 2 倍) | 避免并行進程過多占用 ARM CPU 資源 |
optimizer_features_enable | 19.10.0.0.0(對應(yīng) Oracle 版本) | 啟用 ARM 專屬優(yōu)化器特性,提升執(zhí)行計劃準確性 |
2. 操作步驟(Oracle 19c 為例)
- 登錄 Oracle sysdba 用戶:
sqlplus / as sysdba
- 查看當前參數(shù)值:
show parameter sga_target;
- 修改參數(shù)(需重啟實例的參數(shù)標注 “需重啟”):
-- 無需重啟的參數(shù)
alter system set processes=1000 scope=both;
alter system set parallel_max_servers=32 scope=both;
-- 需重啟的參數(shù)(重啟前備份實例)
alter system set sga_target=32G scope=spfile;
alter system set pga_aggregate_target=16G scope=spfile;
alter system set optimizer_features_enable='19.10.0.0.0' scope=spfile;
- 重啟 Oracle 實例(業(yè)務(wù)低峰期操作):
shutdown immediate;
startup;
3. SQL 優(yōu)化關(guān)鍵動作
- 優(yōu)先優(yōu)化全表掃描 SQL:ARM CPU 的緩存命中率對性能影響更大,全表掃描會頻繁刷新緩存。通過explain plan for select * from 表名;查看執(zhí)行計劃,對無索引的過濾字段添加索引(如create index idx_表名_字段 on 表名(字段););
- 減少綁定變量窺探:ARM 架構(gòu)下,綁定變量類型不匹配會導(dǎo)致執(zhí)行計劃偏差,需用variable v1 number; execute :v1:=1; select * from 表名 where 字段=:v1;規(guī)范綁定變量使用;
- 更新統(tǒng)計信息:ARM 上 Oracle 統(tǒng)計信息可能不準確,需執(zhí)行exec dbms_stats.gather_database_stats(estimate_percent => 100);全量更新,確保執(zhí)行計劃最優(yōu)。
三、方案三:Oracle ARM 專屬補丁與編譯優(yōu)化 —— 修復(fù)兼容性缺陷
Oracle 官方針對 ARM 平臺提供了專屬補丁(如 PSU 補丁、兼容性補丁),可修復(fù)卡頓、崩潰等已知問題;同時,通過 GCC 編譯優(yōu)化 Oracle 依賴庫,能進一步釋放 ARM 性能。
1. 補丁優(yōu)化:修復(fù)官方已知兼容性問題
- 補丁類型:需安裝 “ARM 架構(gòu)專屬 PSU 補丁”(如 Oracle 19c 的 19.17.0.0.0 PSU 補丁,補丁號 34736225),該補丁包含 ARM 平臺的 IO 調(diào)度、內(nèi)存管理優(yōu)化;
opatch lspatches
- 安裝步驟(需 Oracle Support 賬號):
- 下載對應(yīng) ARM 版本的補丁到/u01/app/oracle/patches;
- 關(guān)閉 Oracle 實例和監(jiān)聽:
shutdown immediate; lsnrctl stop
- 執(zhí)行補丁安裝:
cd /u01/app/oracle/product/19c/dbhome_1/OPatch
./opatch apply /u01/app/oracle/patches/34736225
- 驗證補丁:
./opatch lspatches | grep 34736225
2. 編譯優(yōu)化:提升 Oracle 依賴庫性能
ARM 服務(wù)器默認安裝的libaio(異步 IO 庫)、glibc等依賴庫未針對 Oracle 優(yōu)化,可通過 GCC 重新編譯:
- 安裝編譯依賴:
yum install gcc gcc-c++ make libaio-devel -y
- 下載libaio源碼(官網(wǎng):https://pagure.io/libaio.git),編譯時添加 ARM 優(yōu)化參數(shù):
./configure --prefix=/usr/local/libaio CFLAGS="-O3 -march=armv8-a"(armv8-a需匹配服務(wù)器 ARM 架構(gòu)版本)
make && make install
- 配置 Oracle 使用優(yōu)化后的libaio:
在$ORACLE_HOME/bin/oracle啟動腳本中添加:
export LD_LIBRARY_PATH=/usr/local/libaio/lib:$LD_LIBRARY_PATH
3. 注意事項
- 補丁需與 Oracle 版本、ARM 架構(gòu)(32 位 / 64 位)嚴格匹配,避免兼容性問題;
優(yōu)化效果驗證與后續(xù)建議
- 性能驗證指標:
- 卡頓場景:優(yōu)化前查詢耗時 > 10s 的 SQL,優(yōu)化后需降至 2s 內(nèi);
- 系統(tǒng)層面:通過top查看 Oracle 進程 CPU 使用率(避免持續(xù) > 90%),iostat -x 1查看 IO 等待時間(% util<80%);
- 數(shù)據(jù)庫層面:通過AWR報告(@?/rdbms/admin/awrrpt.sql)對比優(yōu)化前后的 “DB Time”“邏輯讀” 指標,降幅需≥30%。
- 后續(xù)維護建議:
- 每季度檢查 Oracle 官方 ARM 補丁更新,及時修復(fù)新發(fā)現(xiàn)的兼容性問題;
- 避免在 ARM 服務(wù)器上運行 Oracle 12c 及以下舊版本(官方對 ARM 的優(yōu)化主要集中在 18c+);
- 若仍有卡頓,通過ASH報告(@?/rdbms/admin/ashrpt.sql)定位瓶頸,優(yōu)先解決 “CPU 密集型”“IO 密集型” SQL。
通過以上 3 個方案,可從底層系統(tǒng)、數(shù)據(jù)庫配置、官方支持三個維度解決 ARM 服務(wù)器運行 Oracle 的卡頓問題。核心邏輯是 “適配而非替換”—— 利用 ARM 架構(gòu)特性調(diào)整參數(shù)、修復(fù)兼容性缺陷,無需額外硬件投入即可實現(xiàn)性能躍升。