--安裝完達夢數據庫後,可以執行以下腳本自動調整性能相關的參數
--修改調整基礎參數
declare
v_mem_mb int;
v_cpus int;
mem_per int:=100;
MEMORY_POOL int;
CACHE_POOL_SIZE int;
BUFFER_POOLS int;
SORT_BUF_SIZE int;
SORT_BUF_GLOBAL_SIZE INT;
DICT_BUF_SIZE INT;
SESS_POOL_SIZE INT;
begin
SELECT TOP 1 N_CPU,TOTAL_PHY_SIZE/1024/1024 INTO v_cpus,v_mem_mb FROM V$SYSTEMINFO;
print v_cpus;
print v_mem_mb;
v_mem_mb=round(v_mem_mb,-3);
print v_mem_mb;
--修改線程數
IF v_cpus < 8 THEN v_cpus := 8; END IF;
IF v_cpus > 64 THEN v_cpus := 64; END IF;
SP_SET_PARA_VALUE(2,'WORKER_THREADS',v_cpus);
SP_SET_PARA_VALUE(2,'TASK_THREADS',v_cpus/2);
IF v_mem_mb <= 2000 THEN
return;
END IF;
--修改內存池
IF v_mem_mb >= 16000 THEN
MEMORY_POOL := 2048;
CACHE_POOL_SIZE := 1024;
SORT_BUF_SIZE := 100;
SORT_BUF_GLOBAL_SIZE := 3000;
DICT_BUF_SIZE := 500;
BUFFER_POOLS = 19;
SESS_POOL_SIZE = 64;
ELSE
MEMORY_POOL :=cast(v_mem_mb * 0.0625 as int);
CACHE_POOL_SIZE := 200;
SORT_BUF_SIZE := 20;
SORT_BUF_GLOBAL_SIZE := 500;
DICT_BUF_SIZE := 50;
BUFFER_POOLS := 7;
SESS_POOL_SIZE =32;
END IF;
v_mem_mb := v_mem_mb * (mem_per/100.0);
--修改內存
SP_SET_PARA_VALUE(2,'MAX_OS_MEMORY', mem_per);
SP_SET_PARA_VALUE(2,'MEMORY_POOL', MEMORY_POOL);
SP_SET_PARA_VALUE(2,'BUFFER', cast(v_mem_mb * 0.5 as int));
SP_SET_PARA_VALUE(2,'MAX_BUFFER', cast(v_mem_mb * 0.5 as int));
SP_SET_PARA_VALUE(2,'BUFFER_POOLS', BUFFER_POOLS);--7,11,19,37,67,101 (4G-128G)
SP_SET_PARA_VALUE(2,'RECYCLE', cast(v_mem_mb * 0.125 as int));
SP_SET_PARA_VALUE(2,'RECYCLE_POOLS', 11);
SP_SET_PARA_VALUE(2,'HJ_BUF_GLOBAL_SIZE', cast(v_mem_mb * 0.0625 as int));
SP_SET_PARA_VALUE(2,'HJ_BUF_SIZE', cast(v_mem_mb * 0.00625 as int));
SP_SET_PARA_VALUE(2,'HAGR_BUF_GLOBAL_SIZE',cast(v_mem_mb * 0.0625 as int));
SP_SET_PARA_VALUE(2,'HAGR_BUF_SIZE', cast(v_mem_mb * 0.00625 as int));
SP_SET_PARA_VALUE(2,'SESS_POOL_SIZE', SESS_POOL_SIZE);
SP_SET_PARA_VALUE(2,'CACHE_POOL_SIZE', CACHE_POOL_SIZE);--SQL緩衝池大小,以兆爲單位。
SP_SET_PARA_VALUE(2,'USE_PLN_POOL', 1); --啓用執行計劃緩存,默認開啓
SP_SET_PARA_VALUE(2,'OLAP_FLAG', 2); --統計分析型庫設置爲1
SP_SET_PARA_VALUE(2,'VIEW_PULLUP_FLAG', 1); --視圖上拉優化
--SP_SET_PARA_VALUE(2,'ENABLE_MONITOR', 2); --關閉性能監視功能
SP_SET_PARA_VALUE(2,'SVR_LOG', 0); --關閉SQL日誌記錄
SP_SET_PARA_VALUE(2,'SORT_BUF_SIZE', SORT_BUF_SIZE);--數據量大,且排序sql較多,可調大該參數,單位Mb
SP_SET_PARA_VALUE(2,'SORT_BUF_GLOBAL_SIZE', SORT_BUF_GLOBAL_SIZE);--數據量大,且排序sql較多,可調大該參數,單位Mb
SP_SET_PARA_VALUE(2,'TEMP_SIZE', 1024);--默認創建的臨時表空間大小,以兆爲單位
SP_SET_PARA_VALUE(2,'MAX_SESSIONS', 500); --最大會話連接數
SP_SET_PARA_VALUE(2,'MAX_SESSION_STATEMENT', 1000); --單個會話上允許同時打開的語句句柄最大數
--SP_SET_PARA_VALUE(2,'BATCH_PARAM_OPT', 1);
SP_SET_PARA_VALUE(2,'DICT_BUF_SIZE', DICT_BUF_SIZE); --字典緩衝區大小,以兆爲單位
SP_SET_PARA_VALUE(1,'PK_WITH_CLUSTER', 0);
--SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE', 2); --開啓oracle兼容性
end;
--執行完以上腳本後,重啓數據庫服務即可生效