Informix數據庫調優方法

發表于:2007-06-13來源:作者:點擊數: 標簽:
Informix IDS數據庫廣泛的應用在 金融 、 電信 和郵政等各個行業中,它是一個多線程的關系數據庫 服務器 ,采用對稱的多處理器技術和單處理器體系結構,并具有先進的技術、 性能 與高 可靠性 和高可用性。它為用戶提供了動態系統管理工具來監控和管理數據庫

Informix IDS數據庫廣泛的應用在金融、電信和郵政等各個行業中,它是一個多線程的關系數據庫服務器,采用對稱的多處理器技術和單處理器體系結構,并具有先進的技術、性能與高可靠性和高可用性。它為用戶提供了動態系統管理工具來監控和管理數據庫服務器。隨著數據庫數量的增加和應用處理交易量的增多,它的運行效率顯得尤為突出。在硬件環境不變的情況下,數據庫性能的提高也一直成為大家關注的話題。

數據庫系統性能通常與CPU、共享內存、數據的存儲和網絡設置等四個方面有直接的關系。下面著重介紹通過配置Informix IDS參數和監控Informix IDS運行效率,來提高數據庫的性能。

虛擬處理器參數的調整和監控

Informix IDS對于虛擬處理器的分類,達到了十多種,每個虛擬處理器像操作系統的一個CPU允許多個進程服務于多個用戶一樣,也可以運行多個線程來為多個 SQL 客戶機應用程序提供服務。其中最重要的虛擬處理器是CPU、AIO、網絡處理器三種,在這三種服務器中,CPU虛擬處理器(CPU VP)是最重要的,它驅動其他虛擬處理器,如磁盤 I/O 虛擬處理器(AIO VP)和 IDS 會話中的所有線程。AIO VP的功能是在 SQL 語句訪問或更新數據庫數據時,執行磁盤 I/O。網絡處理器涉及到數據庫服務器的客戶機或用戶連接??梢赃M行兩種類型的連接:共享內存連接和網絡連接。下面分別介紹這三種類型的參數。

1.CPU虛擬處理器(CPU VP)的參數

NUMCPUVPS:定義了Informix IDS 開始啟動的CPU VP的數量。一般情況下不能超過系統CPU的個數,對于單或雙CPU的計算機系統,建議設置NUMCPUVPS是1或者2,即使用一個或兩個CPU VP;對于有4個以上CPU,建議設置NUMCPUVPS的值等于處理器總數減1。

SINGLE_CPU_VP:定義了多CPU VP(0)和單CPU VP(1)設置。

MULTIPROCESSOR:定義了多個CPU VP(1)還是單個CPU VP(0)。

AFF_NPROCS:定義了可以綁定到CPU VP的CPU的數目。

AFF_SPROC:定義了把連續的幾個CPU(AFF_NRPOCS參數定義的值)中第一個CPU的序號連接到CPU VP上。

例如,某個Informix IDS系統所在的硬件平臺有4個CPU,AFF_NPROCS設置為3(即可用于綁定CPUVP的CPU有3個),NUMCPUVPS設置為3,AFF_SPROC設置為1,則3個CPUVP需要綁定到CPU上,是從第2個CPU開始,綁定到第二、三、四個CPU上。SINGLE_CPU_VP設置為0。

2.對于磁盤I/O虛擬處理器(AIO VP)的配置

NUMAIOVP 指定系統上 AIO/KAIO 虛擬處理器的數目,如果Informix IDS采用裸設備存儲,可以設置成2。

在Informix IDS9.2以后的版本中將NUMCPUVPS、NOAGE、AFF_NPROCS、AFF_SPROC、NUMAIOVP用VPCLASS參數代替。當Informix IDS處于online的狀態下,可以使用onmode -p (+/-)#來增加或者減少虛擬處理器。#代表增加或者減少虛擬處理器的個數。

3.對于網絡處理器參數的配置

NETTYPE:定義了Informix IDS的連接類型和連接可以連接的輪詢線索數目。如果sqlhosts文件中支持一個以上的接口或協議的連接,就必須對每個連接類型規定獨立的NETTYPE參數。

輪詢線索可以在兩類VP上運行:NET VP和CPUVP。為得到最佳性能,Informix建議使用NETTYPE表項為CPU VP類只分配一個輪詢線索,將其余輪詢線索輪詢線索分配給NET VP。分配給任何一種連接類型的輪詢線索不得超過NUMCPUVPS的取值。

NETTYPE的配置格式如下:NETTYPE connection_type,poll_threads,c_per_t,vp_class 。其中,connection_type 標識輪詢線索分配的連接協議;poll_threads是分配給該連接類型的輪詢線索數目,對任何連接類型,這個值不能超過NUMCPUVPS值;c_per_t 是每個輪詢線索的連接數目,可以用如下公式計算這個值:c_per_t=connections/poll_threads;connections 是所希望指定的連接類型支持的最大連接數。對于共享內存連接(ipcshm),該值應該加倍以獲得最好的性能;vp_class 是可運行輪詢線索的VP類,如果CPU VP上只運行一個輪詢線索,那么指定為CPU VP。

在對虛擬處理器的監控中,可以通過系統的一些命令,也可以通過數據庫的一些命令,常用的數據庫命令是onstat-grea和onstat -g ioq。

以下是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。

在onstat-g iog指令的輸出中,最需要關注的列是len列。len列的值應該總是為 0 或接近于 0。如果該列的值很高并持續增長,那么我們可能需要添加另一個 AIO/KAIO 虛擬處理器來減少磁盤 I/O 負載。

監控虛擬處理器的方法比較多,可以使用Informix IDS查詢語句在系統表中找到虛擬處理器的使用情況:還可以在Unix操作系統中使用系統命令sar、top等來監控操作系統的CPU使用情況;還可以在一段時間內的重復執行Informix IDS命令onstat-g glo來監控各個虛擬處理器已占用的CPU資源。判斷CPU的忙閑。

內存使用效率的參數調整和監控

Informix IDS 使用的內存部分被數據庫服務器線程以及其他用戶和虛擬進程共享,所以這部分的內存叫做共享內存,共享內存減少磁盤 I/O, 提供了最快地進行進程間通信的方法,還可以使數據庫服務器減少總的內存使用。

Informix IDS共享內存分為四個部分:駐留部分、虛處理部分、消息部分和虛擬擴展區部分,其中消息部分只有在客戶機和服務器采用共享內存方式連接時才有,而且尺寸很小。虛擬擴展區也極小,它包含了用于 DataBlade 模塊的線程 heaps 和其他在用戶定義的虛擬處理器中運行的用戶定義例程。

1.駐留內存部分的參數

駐留內存部分又可以細分為:共享內存頭、緩沖區,邏輯日志緩沖區、物理日志緩沖區、鎖。

共享內存頭在共享內存中包含所有其他結構的描述,還包含到這些結構位置的指針共享內存頭是在初始化 Informix IDS 時創建的,并且不能進行調優。

緩沖區存儲 Informix IDS 從 dbspace 所讀取的數據,是數據庫對象數據,如表的數據或索引數據。緩沖區占用了駐留內存中最大的部分。所有的緩沖區被組織到一個較長的最近最少使用(least-recently-used,LRU)緩沖區隊列中,并通過最近最少使用(LRU)機制進行管理。定義緩沖區的參數是BUFFERS。稱作指定共享內存緩沖區的最大數目,該參數對數據庫I/O和事務處理吞吐量有明顯的影響。但是,如果分配過多的緩沖區會影響到操作系統的內存并導致過多的交換內存頁面的活動。一般建議設置為物理內存的20%到25%。

邏輯日志緩沖區是用來存儲最后一次備份開始的邏輯日志記錄的。邏輯日志記錄保存了 SQL 語句對數據庫數據進行的修改。在初始化Informix IDS 時,它創建三個邏輯日志緩沖區,以循環方式運作,來確保將獲得的每一條邏輯日志記錄都被刷新到磁盤中。LOGBUFF定義了邏輯日志緩沖區的數量,緩沖區的大小決定了它被添滿的頻率,從而決定了它必須被刷新到硬盤上的邏輯文件中的頻率。一般情況下,Informix IDS建議設置為16KB或32KB

物理日志緩沖區在Informix IDS修改或著刪除記錄之前,將該記錄的原始值存入到物理日志緩沖區中,在事務失敗時,用于恢復數據,以保持數據的一致性。在Informix IDS初始化時,創建了兩個物理日志緩沖區,也以循環的方式運作。與物理日志緩沖區對應的參數是PHYSBUFF。

鎖包含可用鎖的數量,每個用戶對數據庫的連接并執行數據庫的操作,都需要一定數量的鎖。在Informix IDS9.2以后的版本中,當用戶的鎖不夠時,可以動態的分配鎖的數量。在以前的版本中,該數值是固定不變的。與鎖對應的參數是LOCKS。一般情況下設置為2000到8000000個。

2.共享內存虛擬存儲區的參數

共享內存虛擬存儲區存儲各種各樣的不同數據,可以分為:內部表、較大的緩沖區、會話數據、線程數據(堆棧和堆)、數據分布緩存器、字典緩存器、SPL 例程緩存器、SQL 語句緩存器、排序池、全局池。

影響虛擬存儲區的參數是:SHMADD、SHMVIRTSIZE 、STACKSIZE。

SHMVIRTSIZE定義了分配給Informix IDS共享內存的虛擬存儲區的大小。Informix IDS在處理大型查詢或高峰負荷的需要增加共享內存給虛擬存儲區,但是共享內存的分配需要增加事務處理的時間,故在設置SHMVIRTSIZE值時,一般考慮能滿足一個日常操作的需要。

STACKSIZE指示了數據庫服務器為每個活動線程指派的初始堆棧的大小。如果將該參數配置得過小,那么線程將無法擁有執行其程序的足夠內存空間,而且它將干擾其他線程。

SHMADD定義了Informix IDS自動加到虛擬存儲區的共享內存增量的大小。在增加共享內存時,要占用CPU周期;每次的增加量越大,增加次數就越少,留給其它的進程的內存也越少。所以一般采用大的增加量。但是在內存負荷很重時,少量增加使其他程序更好的共享內存資源。所以,如果實際內存小于等于256MB,則建議SHMADD使用缺省值8192KB;如果在256MB到512MB之間,則設置為16384KB;如果大于512MB,則設置為32768KB。

可以用命令 onstat -g seg來顯示 IDS 當前共享內存虛擬區中的段的數目。

Informix IDS在初始化時,如果定義的虛擬內存區尺寸太小,會自動向虛擬區附加其他操作系統段,虛擬內存中的段過多從而引起數據庫的整體性能下降。所以在初始化時,將虛擬內存區的尺寸配置得足夠大,以避免進行動態的分配共享內存段。在該列的輸出中,class列為R是駐留內存段,V是虛擬內存段,M是消息內存段。如果顯示的虛擬內存段多于三個,那么就需要提高配置文件中 SHMVERSIZE 參數的值。

命令 onstat -p是監控內存的另一個命令。其輸出結果中的兩個%cache顯示了讀寫高速緩存比例的百分比,一般在80%到90%之間,如果低于80%,要調節BUFFERS參數值。ovlock 字段表明 IDS 在使用了最大數量的鎖之后嘗試過再使用鎖的次數,如果該數字非零,可能需要提高配置文件中 LOCKS 參數的值。ovbuf 字段表明 IDS 在使用了最大數量的緩沖區之后嘗試過再使用緩沖區的次數。如果該數字很大,比如說超過 100000,就需要提高 BUFFERS 參數,以便用戶在需要從磁盤訪問數據時不必等待緩沖區。在監控內存的使用情況時還可以采用Unix系統命令vmstat。

存儲器及I/O的參數調整和監控

Informix IDS支持兩種基本的數據存儲設備裸設備和文件系統,建議使用裸設備存儲數據文件。與文件系統相比,裸設備在存取數據時要快得多,而且對用戶來說是看不到裸設備文件的,要安全一些。使用文件系統作為數據存儲設備還有一個潛在的危險,當文件系統由于某些操作系統的錯誤而崩潰,且有一個數據庫事務正在進行時,數據庫服務器將認為數據庫事務已經成功完成,但實際上,該事務正陷入操作系統緩沖區中,這最終將導致數據庫中的某些不一致。

Informix IDS在dbspace中存取數據,dbspace又包含一個或多個chunk(塊)。在9.40以后的版本中chunk的大小可以超過2G,在以前的版本中不能超過2G??梢允褂胦nsta-d監控dbspace和chunk的使用情況和狀態。

與I/O參數調整直接相關的是檢查點。檢查點是使磁盤上的頁與共享內存緩沖池中的頁同步的過程。檢查點時間包含檢查點間隔時間和檢查點持續時間。在檢查點期間,IDS 阻止用戶線程進入臨界會話,并阻止所有的事務活動。因此,檢查點持續時間過長,用戶會經歷系統掛起。

CKPTINTVL參數指定檢查點之間的時間間隔。當檢查點間隔到了,則系統執行檢查點操作。

PHYSFILE指定物理日志的大小。一旦物理日志(PHYSFILE)的75%已滿,檢查點也會發生。

LRUS參數指示共享內存緩沖池中設置的最近最少使用(LRU)隊列數目。

可以用LRUS和LRU_MAX_DIRTY及LRU_MIN_DIRTY來控制在滿的檢查點之間頁被刷新到磁盤的頻度。在某些情況下,通過設置這些參數,使得在檢查點發生時需要刷新修改的頁數量很少,可以達到高的吞吐量;假如檢查點持續時間始終超過 10秒甚至以上,那么可能需要減少 LRU_MIN_DIRTY 和 LRU_MAX_DIRTY 配置參數的值以獲取更短的檢查點持續時間??梢允褂胦nstat -R和onstat -P、onstat -F命令的輸出來確定參數值的大小。一般情況下LRU_MIN_DIRTY設置為50,LRU_MAX_DIRTY設置為70。

調整Informix IDS參數來優化數據庫性能,是Informix IDS性能優化的一個方面,它的性能調優還要從網絡、硬件、操作系統、應用程序等多個方面來綜合考慮,其性能的優化是一個高度復雜,異常繁瑣而且涉及面很廣的綜合性工作,而且它們之間相互關聯,相互影響。在調整過程中,應該明確數據庫的運行狀況和系統資源的使用情況,確定問題的瓶頸出現在哪里。然后根據問題的所在來優化數據庫的性能。數據庫參數的調整是數據庫優化的一個方面,在此只是想起到一個拋磚引玉的作用。(責任編輯:銘銘)



原文轉自:http://www.anti-gravitydesign.com

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97