informix資料庫調優
調優思路整理如下
一、PDQ
即利用infomix提供的PDQ(並行資料庫查詢)功能,並結合Power8處理器的SMT特性來提高SQL查詢效率
PDQ允許資料庫伺服器將查詢一個方面的某個工作分發給幾個處理器。例如:如果查詢要求聚集,則資料庫伺服器可以將聚集工作分發給幾個處理器。而這次比賽的第二個題目,剛好用到了時間序列的AggregateRange 聚集函式,特別適用PDQ查詢的場景。
SMT命令
Linux Power8伺服器設定SMT命令如下:
1、檢視smt
[root@loofweek ~]# ppc64_cpu --smt
2、關閉smt
[root@loofweek ~]# ppc64_cpu --smt=off
3、設定smt
[root@loofweek ~]# ppc64_cpu --smt=8
使用PDQ
使用PDQ時,首先要申明所做的操作是PDQ操作,通過執行:set pdqpriority high可以開啟PDQ開關。執行完以後,應關閉PDQ開關:set pdqpriority low;其次,為了更好的發揮PDQ技術,應該對操作的資料表進行資料分割;最後運用PDQ技術應該選擇多CPU的機器。當使用如下操作時,將不能啟動 PDQ:
(1)查詢使用了”cursor stablility”的隔離等級;
(2)查詢使用了update遊標或者遊標定義為”with hold”;
(3)查詢使用了巢狀子查詢;
(4)查詢中使用了儲存過程;
(5)查詢中不包含scan,join,sort,group,aggregate。
PDQ監控
使用onstat -g mgm可以監控PDQ使用情況。
二、CPU VP引數設定
NUMCPUVPS
NUMCPUVPS設定為能夠處理承接任務的最小的數,這個數目小於或等於系統中可利用的CPU數,建議不要將CPU VP數設定成大於可用CPU數目。通常對於聯機事務處理(OLTP)應用:NUMCPUVPS=實際CPU數量-1(對於單CPU系統,該引數應為1);對於聯機分析處理(OLAP)應用:NUMCPUVPS=實際CPU數量。
通過ONCONFIG檔案配置NUMCPUVPS
NUMAIOVPS
AIO,負責磁碟I/O任務;(KAIO),通過ONCONFIG檔案進行配置NUMAIOVPS引數,一般配置為CHUNK的個數,當使用KAIO時,配置為2個即可;
其它
PIO,負責物理日誌寫任務,系統自動分配1~2個VPS;
LIO,負責邏輯日誌寫任務, 系統自動分配1~2個VPS
監控命令
1、onstat -g rea
/usr/informix >onstat -g rea
Informix Dynamic Server Version 9.30.FC5 -- On-Line -- Up 36 days 00:22:32 -
- 5352416 Kbytes
Ready threads:
tid tcb rstcb prty status vp-class name
命令說明:
onstat -g rea監控了就緒佇列中的執行緒數目。包括準備執行而且在等待資源的執行緒。理想的狀態下是輸出極少的條目或者不顯示任何條目。如果輸出的某種 VP 類條目持續增長, 那麼就要考慮在該類中新增VP。
2、onstat-g ioq
onstat -g ioq 監控AIO佇列,監控I/O請求佇列LEN和MAXLEN來觀察AIO的情況。
onstat -g ioq指令的輸出中,最需要關注的列是len列。len列的值應該總是為 0 或接近於 0。如果該列的值很高並持續增長,那麼我們可能需要新增另一個 AIO/KAIO 虛擬處理器來減少磁碟 I/O 負載。
三、記憶體使用效率的引數調整和監控
Informix IDS 使用的記憶體部分被資料庫伺服器執行緒以及其他使用者和虛擬程序共享,所以這部分的記憶體叫做共享記憶體,共享記憶體減少磁碟 I/O, 提供了最快地進行程序間通訊的方法,還可以使資料庫伺服器減少總的記憶體使用。
Informix IDS共享記憶體分為四個部分:駐留部分、虛處理部分、訊息部分和虛擬擴充套件區部分,其中訊息部分只有在客戶機和伺服器採用共享記憶體方式連線時才有,而且尺寸很小。虛擬擴充套件區也極小,它包含了用於 DataBlade 模組的執行緒 heaps 和其他在使用者定義的虛擬處理器中執行的使用者定義例程。
命令 onstat -p是監控記憶體的另一個命令。其輸出結果中的兩個%cache顯示了讀寫快取記憶體比例的百分比,一般在80%到90%之間,如果低於80%,要調節BUFFERS引數值。ovlock 欄位表明 IDS 在使用了最大數量的鎖之後嘗試過再使用鎖的次數,如果該數字非零,可能需要提高配置檔案中 LOCKS 引數的值。ovbuf 欄位表明 IDS 在使用了最大數量的緩衝區之後嘗試過再使用緩衝區的次數。如果該數字很大,比如說超過 100000,就需要提高 BUFFERS 引數,以便使用者在需要從磁碟訪問資料時不必等待緩衝區。在監控記憶體的使用情況時還可以採用Unix系統命令vmstat。
寫這篇文章最直接原因是完成Power8實驗室極限演算法挑戰賽物聯網智慧家居時間序列分析中調優部分的任務,由於時間及伺服器資源緊張問題,並未在實際中進行引數調優及比較,實在有些小遺憾。
參閱資料如下: