表中的"性能影響"列指示每個參數影響系統性能的相對程度。不可能將此列准確地應用於所有環境;您應該將此信息視為一般情況。
高-指示該參數可以對性能有重要影響。應有意識地決定這些參數的值;在某些情況下,將意味著接受提供的缺省值。
中-指示該參數可以對性能有某些影響。您的特定環境和需要將確定應對這些參數進行多大程度的調整。
低-指示該參數對性能沒有那麼普遍或沒有那麼重要的影響。
無-指示該參數對性能沒有直接的影響。 當您不必因性能的原因調整這些參數時,它們對於您系統配置的其他方面(如啟用通信支持)可能很重要。
參數
性能影響
其他信息
app_ctl_heap_sz
中
應用程序控制堆大小 (app_ctl_heap_sz)
applheapsz
中
應用程序堆大小 (applheapsz)
audit_buf_sz
中
審查緩沖區大小 (audit_buf_sz)
autorestart
低
啟用自動重新啟動 (autorestart)
avg_appls
高
活動應用程序的平均數 (avg_appls)
buffpage
高(活動時)
緩沖池大小 (buffpage)
catalogcache_sz
中
目錄高速緩存大小 (catalogcache_sz)
chngpgs_thresh
高
更改頁阈值 (chngpgs_thresh)
copyprotect
無
啟用副本保護 (copyprotect)
dbheap
中
數據庫堆 (dbheap)
dft_degree
高
缺省度 (dft_degree)
dft_extent_sz
中
表空間的缺省數據塊大小 (dft_extent_sz)
dft_loadrec_ses
中
缺省的裝入恢復對話數 (dft_loadrec_ses)
dft_prefetch_sz
中
缺省預讀取大小 (dft_prefetch_sz)
dft_queryopt
中
缺省查詢優化級別 (dft_queryopt)
dft_refresh_age
中
缺省刷新時限 (dft_refresh_age)
dft_sqlmathwarn
無
遇到算術異常繼續 (dft_sqlmathwarn)
dir_obj_name
無
DCE 名稱空間中的對象名 (dir_obj_name)
discover_db
中
發現數據庫 (discover_db)
dlchktime
中
檢查死鎖的時間間隔 (dlchktime)
dl_expint
無
數據鏈路存取令牌到期時間間隔 (dl_expint)
dl_num_copIEs
無
數據鏈路副本數 (dl_num_copIEs)
dl_time_drop
無
卸下後的數據鏈路時間 (dl_time_drop)
dl_token
低
數據鏈路令牌算法 (dl_token)
dl_upper
無
大寫的數據鏈路令牌 (dl_upper)
dyn_query_mgmt
1.為什麼需要磁盤陣列?
如何增加磁盤的存取(Access)速度,如何防止數據因磁盤的故障而失落及如何有效的利用磁盤空間,一直是電腦專業人員和用戶的困擾;而大容量磁盤的價格非常昂貴,對用戶形成很大的負擔。磁盤陣列技術的產生一舉解決了這些問題。
過去十年來,CPU的處理速度增加了五十倍有多,內存(memory)的存取速度亦大幅增加,而數據儲存裝置--主要是磁盤(hard disk)--的存取速度只增加了三、四倍,形成電腦系統的瓶頸,拉低了電腦系統的整體性能(throughput),若不能有效的提升磁盤的存取速度,CPU、內存及磁盤間的不平衡將使CPU及內存的改進形成浪費。
目前改進磁盤存取速度的的方式主要有兩種。一是磁盤快取控制(disk cache controller),它將從磁盤讀取的數據存在快取內存(cache memory)中以減少磁盤存取的次數,數據的讀寫都在快取內存中進行,大幅增加存取的速度,如要讀取的數據不在快取內存中,或要寫數據到磁盤時,才做磁盤的存取動作。這種方式在單工環境(single-tasking envioronment)如DOS之下,對大量數據的存取有很好的性能(量小且頻繁的存取則不然),但在多工(multi-tasking)環境之下(因為要不停的作數據交換(swapping)的動作)或數據庫(database)的存取(因為每一記錄都很小)就不能顯示其性能。這種方式沒有任何安全保障。
其二是使用磁盤陣列的技術。磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它將數據以分段(striping)的方式儲存在不同的磁盤中,存取數據時,陣列中的相關磁盤一起動作,大幅減低數據的存取時間,同時有更佳的空間利用率。磁盤陣列所利用的不同的技術,稱為RAID level,不同的level針對不同的系統及應用,以解決數據安全的問題。
一般高性能的磁盤陣列都是以硬件的形式來達成,進一步的把磁盤快取控制及磁盤陣列結合在一個控制器(RAID controler)或控制卡上,針對不同的用戶解決人們對磁盤輸出入系統的四大要求:
(1)增加存取速度,
(2)容錯(fault tolerance),即安全性
(3)有效的利用磁盤空間;
(4)盡量的平衡CPU,內存及磁盤的性能差異,提高電腦的整體工作性能。
2.磁盤陣列原理
磁盤陣列中針對不同的應用使用的不同技術,稱為RAID level,RAID是Redundent Array of Inexpensive Disks的縮寫,而每一level代表一種技術,目前業界公認的標准是RAID 0~RAID 5。這個level並不代表技術的高低,level 5並不高於level 3,level 1也不低過level 4,至於要選擇那一種RAID level的產品,純視用戶的操作環境(Operating environment)及應用(application)而定,與level的高低沒有必然的關系。RAID 0及RAID 1適用於PC及PC相關的系統如小型的網絡服務器(network server)及需要高磁盤容量與快速磁盤存取的工作站等,因為比較便宜,但因一般人對磁盤陣列不了解,沒有看到磁盤陣列對他們價值,市場尚未打開;RAID 2及RAID 3適用於大型電腦及影像、CAD/CAM等處理;RAID 5多用於OLTP,因有金融機構及大型數據處理中心的迫切需要,故使用較多而較有名氣,但也因此形成很多人對磁盤陣列的誤解,以為磁盤陣列非要RAID 5不可;RAID 4較少使用,因為兩者有其共同之處,而RAID 4有其先天的限制。其他如RAID 6,RAID 7,乃至RAID 10等,都是廠商各做各的,並無一致的標准,在此不作說明。介紹各個RAID level之前,先看看形成磁盤陣列的兩個基本技術:
磁盤延伸(Disk Spanning):
譯為磁盤延伸,能確切的表示disk spanning這種技術的含義。如下圖所示,OAraid 磁盤陣列控制器,聯接了四個磁盤:
磁盤1 磁盤2 磁盤3 磁盤4
這四個磁盤形成一個陣列(array),而磁盤陣列的控制器(RAID controller)是將此四個磁盤視為單一的磁盤,如DOS環境下的C:盤。這是disk spanning的意義,因為把小容量的磁盤延伸為大容量的單一磁盤,用戶不必規劃數據在各磁盤的分布,而且提高了磁盤空間的使用率。OAraid的SCSI磁盤陣列更可連接幾十個磁盤,形成數十GB到數百GB的陣列,使磁盤容量幾乎可作無限的延伸;而各個磁盤一起作取存的動作,比單一磁盤更為快捷。很明顯的,有此陣列的形成而產生RAID的各種技術。我們也可從上圖看出inexpensive(便宜)的意義,因為四個250MBbytes的磁盤比一個1GBytes的磁盤要便宜,尤其以前大磁盤的價格非常昴貴,但在磁盤越來越便宜的今天,inexpensive已非磁盤陣列的重點,雖然對於需要大磁盤容量的系統,仍是考慮的要點。
磁盤或數據分段(Disk Striping or Data Striping):
磁盤1
A2-A3
B2-B3
C2-C3
D2-D3
磁盤2
A4-A5
B4-B5
C4-C5
D4-C5
磁盤3
A6-A7
B6-B7
C6-C7
D6-D7
磁盤0
A0-A1
B0-B1
C0-C1
D0-D1
因為磁盤陣列是將同一陣列的多個磁盤視為單一的虛擬磁盤(virtual disk),所以其數據是以分段(block or segment)的方式順序存放在磁盤陣列中,如下圖:
數據按需要分段,從第一個磁盤開始放,放到最後一個磁盤再回到第一個磁盤放起,直到數據分布完畢。至於分段的大小視系統而定,有的系統或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非數據小於一個扇區(sector,即521bytes),否則其分段應是512byte的倍數。因為磁盤的讀寫是以一個扇區為單位,若數據小於512bytes,系統讀取該扇區後,還要做組合或分組(視讀或寫而定)的動作,浪費時間。從上圖我們可以看出,數據以分段於在不同的磁盤,整個陣列的各個磁盤可同時作讀寫,故數據分段使數據的存取有最好的效率,理論上本來讀一個包含四個分段的數據所需要的時間約=(磁盤的Access time+數據的tranfer time)X4次,現在只要一次就可以完成。
若以N表示磁盤的數目,R表示讀取,W表示寫入,S表示可使用空間,則數據分段的性能為:
R:N(可同時讀取所有磁盤)
W:N(可同時寫入所有磁盤)
S:N(可利用所有的磁盤,並有最佳的使用率)
Disk striping也稱為RAID 0,很多人以為RAID 0沒有甚麼,其實這是非常錯誤的觀念,因為RAID 0使磁盤的輸出入有最高的效率。而磁盤陣列有更好效率的原因除數據分段外,它可以同時執行多個輸出入的要求,因為陣列中的每一個磁盤都能獨立動作,分段放在不同的磁盤,不同的磁盤可同時作讀寫,而且能在快取內存及磁盤作並行存取(parallel Access)的動作,但只有硬件的磁盤陣列才有此性能表現。
從上面兩點我們可以看出,disk spanning定義了RAID的基本形式,提供了一個便宜、靈活、高性能的系統結構,而disk striping解決了數據的存取效率和磁盤的利用率問題,RAID 1至RAID 5是在此基礎上提供磁盤安全的方案。
RAID 1
RAID 1是使用磁盤鏡像(disk mirroring)的技術。磁盤鏡像應用在RAID 1之前就在很多系統中使用,它的方式是在工作磁盤(working disk)之外再加一額外的備份磁盤(backup disk),兩個磁盤所儲存的數據完全一樣,數據寫入工作磁盤的同時亦寫入備份磁盤。磁盤鏡像不見得就是RAID 1,如Novell Netware亦有提供磁盤鏡像的功能,但並不表示Netware有了RAID 1的功能。一般磁盤鏡像和RAID 1有二點最大的不同:
RAID 1無工作磁盤和備份磁盤之分,多個磁盤可同時動作而有重疊(overlaping)讀取的功能,甚至不同的鏡像磁盤可同時作寫入的動作,這是一種最佳化的方式,稱為負載平衡(load-balance)。例如有多個用戶在同一時間要讀取數據,系統能同時驅動互相鏡像的磁盤,同時讀取數據,以減輕系統的負載,黾覫/O的性能。
RAID 1的磁盤是以磁盤延伸的方式形成陣列,而數據是以數據分段的方式作儲存,因而在讀取時,它幾乎和RAID 0有同樣的性能。從RAID的結構就可以很清楚的看出RAID 1和一般磁盤鏡像的不同。
磁盤0
A0
A2
A4
B1
磁盤1
A1
A3
B0
B2
磁盤0
A0
A2
A4
B1
磁盤1
A1
A3
B0
B2
下圖為RAID 1,每一筆數據都儲存兩份:
從上圖可以看出:
R:N(可同時讀取所有磁盤)
W:N/2(同時寫入磁盤數)
S:N/2(利用率)
讀取數據時可用到所有的磁盤,充分發揮數據分段的優點;寫入數據時,因為有備份,所以要寫入兩個磁盤,其效率是N/2,磁盤空間的使用率也只有全部磁盤的一半。
很多人以為RAID 1要加一個額外的磁盤,形成浪費而不看好RAID 1,事實上磁盤越來越便宜,並不見得造成負擔,況且RAID 1有最好的容錯(fault tolerence)能力,其效率也是除RAID 0之外最好的。我們可視應用的不同,在同一磁盤陣列中使用不同的RAID level,如華藝科技公司的OAraid系列都可同一磁盤陣列中定義八個邏輯磁盤(logic disk),分別使用不同的RAID level,分為C:,D:及E:三個邏輯磁盤(或LUN0,LUN1,LUN2).
RAID 1完全做到了容錯包括不停機(non-stop),當某一磁盤發生故障,可將此磁盤拆下來而不影向其他磁盤的操作;待新的磁盤換上去之後,系統即時做鏡像,將數據重新復上去,RAID 1在容錯及存取的性能上是所有RAID level之冠。
在磁盤陣列的技術上,從RAID 1到RAID 5,不停機的意思表示在工作時如發生磁盤故障,系統能持續工作而不停頓,仍然可作磁盤的存取,正常的讀寫數據;而容錯則表示即使磁盤故障,數據仍能保持完整,可讓系統存取到正確的數據,而SCSI的磁盤陣列更可在工作中抽換磁盤,並可自動重建故障磁盤的數據。磁盤陣列之所以能做到容錯及不停機,是因為它有冗余的磁盤空間可資利用,這也就是Redundant的意義。
RAID 2
低
動態 SQL 查詢管理 (dyn_query_mgmt)