正在看的ORACLE教程是:Oracle平台應用程式資料庫系統的設計與開發。Oracle是目前應用最廣泛的資料庫系統。一個完整的資料庫系統包括系統硬體、作業系統、網路層、DBMS(資料庫管理系統)、應用程式與資料,各部分之間是互相依賴的,對每個部分都必須進行合理的配置、設計和最佳化才能實現高效能的資料庫系統。本文討論筆者使用Oracle開發區域網路中、小型資料庫應用中,系統硬體的選擇與使用、應用程式資料庫系統設計與開發方面的一些心得和建議。應用程式資料庫系統包含應用程式資料庫和應用兩方面的內容,應用程式資料庫就是生產資料庫,與系統資料庫相對。
系統硬體的選擇與使用
與資料庫系統密切相關的硬體主要有CPU、記憶體、叢集、存放裝置等,這裡不對叢集進行討論。
1、CPU
CPU的數目和速度直接影響資料庫操作的速度,Oracle資料庫提供並行查詢選項,允許SQL操作以協同方式在多個CPU上執行,可以很大程度的發揮多CPU的效能。為系統添加CPU前,首先要對應用程式的SQL代碼做最佳化,提高應用程式的效率,品質低劣的應用可能會引起CPU資源的無謂的消耗;其次,要瞭解作業系統對CPU數目的限制及系統的可擴充性。在系統CPU資源已定的情況下,要對各類應用進行分析,在保證關鍵應用正常啟動並執行前提下,儘可能將大量佔用CPU資源的應用放在系統相對閒置時候進行。良好的工作調度可以有效減少對CPU的競爭使用,加快系統的回應時間。
2、記憶體
資料庫系統中,應保證有足夠大的記憶體。在UNIX系統中,如果系統的實體記憶體小於1GB,可將交換區的大小設為記憶體的4倍,否則,可設為記憶體的2倍,交換區要放在磁碟速度最快的硬碟上。Oracle 的SGA區大小直接關係到資料庫操作的效能,一般來說,SGA區的大小可設為系統可用記憶體的55%到57%,SGA區過多佔用系統記憶體反而會降低效能。在應用系統運行中,應定期監測系統的記憶體使用量情況,對關鍵應用進行分析,根據應用適時調整SGA區各部分的大小。Oracle9i可在不重新啟動資料庫的情況下修改SGA區的參數,即時改變SGA區的大小。
3、存放裝置
在網路時代,資訊資源的積累和廣泛應用對資料存放區技術的發展提出了更大的挑戰,資料存放區模式從傳統的匯流排串連模式進入了網路儲存模式。但存放裝置依然是硬碟、磁帶(帶庫)、磁碟陣列,在中、小型資料庫應用中傳統儲存模式仍佔主導地位。
磁碟I/O是資料庫操作的瓶頸之一,磁碟的合理選擇和使用在資料庫系統中顯得尤為重要。在最初做資料庫系統規劃時,應充分考慮到系統的容量和預期的增長,儘可能為以後的擴充留足空間。在硬碟和磁碟陣列的選擇與使用中,應注意以下幾點:
·選擇支援熱插拔功能的硬碟,這樣在出現硬碟Oracle 平台應用程式資料庫系統的設計與開發失敗時,可以在系統正常啟動並執行情況下更換硬碟;
·不要選擇太大的硬碟,切記對Oracle 應用程式,1~4GB大小的硬碟是比較合適的,最好購買大量的中小型硬碟,這樣在配置RAID時可提供更大的靈活性;
·如果選用了磁碟陣列,對於Oracle資料庫應用,如果經費能夠支援,RAID 0+1是最佳的配置方法。在RAID 5中,讀操作效能得到了一定的改善,但寫效能損失很大,如果某個硬碟失敗,硬碟重建的工作量非常大,RAID 5 適用於DSS(決策支援系統)應用,對OLTP(聯機事物處理)應用不太合適;
·在實現RAID時,要正確地選擇分條的大小,決定分條大小的三個主要因素是:應用程式的特性(DSS、OLTP、批處理)、作業系統與資料庫的資料區塊大小、磁碟陣列中的硬碟數目。資料庫的資料區塊大小應是作業系統資料區塊大小的整數倍,同樣分條大小也必須是作業系統資料區塊大小的整數倍。如果使用裸裝置,分條大小應是作業系統物理資料區塊的大小。分條可按照水平方向進行,也可按照垂直方向進行。水平分條跨越每個硬碟控制器進行,垂直分條跨越整個硬碟集合進行,分條集合中的成員數應不大於硬碟控制器數。OLTP應用程式,資料訪問的資料量不大,一般可選擇32KB 或64KB 的分條大小,而DSS應用程式訪問的資料量大,可考慮使用64KB、128KB或256KB的分條大小。
應用程式資料庫的設計與開發
Oracle資料庫軟體安裝和配置完成後,就進入了應用程式資料庫的設計階段,應用程式資料庫設計包括邏輯設計與實體設計。合理的邏輯設計會大大提高資料庫的效能,增強資料庫的可維護性。在設計中根據應用,抽象出實體關聯模型,將實體關聯圖映射為標準化(資料完整、與應用無關、儲存最佳化)的關聯式模式(資料庫物件),當前有一些協助工具輔助(Oracle Designer等)來實現實體關聯圖到SQL代碼的映射;資料庫的實體設計就是資料庫物件的儲存設計,即如何為資料庫物件分配儲存空間。
在進行資料庫物件的設計前,資料庫的管理和開發人員對應用和應用的資料及其應用關係要有一個詳盡的理解,根據應用進行資料庫物件的規劃和設計,大概包含以下幾個方面:
·確定需建立的資料庫使用者,明確使用者的系統許可權和資料表空間限額,為使用者設計資源限制profile;
·確定應用資料應分多少個表進行設計,各表分別屬於的使用者,各使用者對各個表的操作許可權;
·明確各表的結構,確定表的主鍵及約束;
·明確哪些表是應用啟動並執行關鍵表,哪些是事務表;
·分析哪些表是主表,哪些表是從表,確定表和表之間的外鍵約束,選擇合適的表作為表串連的驅動表;
·根據應用,確定在哪些表上對哪些列建立合適的索引;
·根據表和索引的設計,確定要建立的資料表空間和復原段,為資料表空間和復原段選擇合適的磁碟,儘可能建立本地管理的資料表空間,減少資料庫空間管理方面的工作;
·明確需要編寫的觸發器及過程;
·為資料庫物件選擇備份和恢複策略。
在資料庫設計階段,有時未必能完全確定合適的資料庫物件的特徵,應用設計和開發中還可能發現不合適的地方,需要回過頭來進行調整和修改。但設計階段的工作越細緻,出現問題的可能性就越小,工作的效率就越高。
建立資料庫物件時,要根據資料庫物件的特點,結合存放裝置的大小、數量及速度等,對資料庫物件分類進行儲存,最大限度地消除或減少資源競爭。在資料庫物件建立時主要應遵循以下原則:
·應用資料應放在單獨的資料表空間,不要將應用資料放在系統資料表空間,為防止無意的使用系統資料表空間,將應用使用者的系統資料表空間限額設為0。
·索引和表應放在位於不同硬碟上的不同的資料表空間,這樣會提高資料庫操作的速度。
·需要同時被訪問的表要分開存放,利於並發訪問的實施。
·如果磁碟數量有限,可把不常聯合訪問的表放在相同的磁碟上。
·預分配的原則。建立資料庫物件(資料表空間、復原段、表、索引等)時,根據對象的情況設定合適的storage參數非常重要。建立對象設計時,對對象的容量和預期的增長有一個估計,這樣才能確定儲存參數的大小。一般來說,應預先給表和索引等資料庫物件分配足夠的空間,資料庫段不要太多地做動態擴充,因為會影響資料庫效能。一個段(segment)由一個區(extent)構成是最理想的,initial 參數可以稍大一點,如果可能,可設為最大容量的大小,initial必須是db_block_size的整數倍;next參數的設定比較靈活,根據應用進行相應的設定,但也必須是db_block_size的整數倍;為了減少資料庫片段的產生,pctincrease參數應該盡量設為0;更新操作比較少的段,pctfree要設定得小一點,更新操作很多的段要設定得大一些;inittrans和freelists的值要相等,大小與並發事務數相關。
·分而治之的原則。大的資料庫表和索引可考慮進行分區存放,不同的分區可位於不同的磁碟上,更好地均衡I/O。Oracle可以只對錶的某些分區進行查詢,這樣會提高查詢的速度;可對分區進行資料的刪除、裝載,還可以移動分區,對錶的管理和控制具有更大的靈活性;可以有更多的策略選擇,更好地執行備份和恢複操作。注意,對某些分區進行操作後,在Oracle8i下必須重建全域索引。
·大小和增長趨勢類似的表最好放在相同的資料表空間,可以有效控制硬碟片段的產生,提高空閑塊的可重用性。
·相同備份和恢複策略的表最好放在同一個資料表空間,這樣有助於備份和恢複工作的完成。
·對回應時間要求苛刻的應用所訪問的對象放在速度快的磁碟上。