李曉英
(大慶油田天然氣分公司 工程技術大隊,黑龍江 大慶 163416)
隨著網絡模式系統應用的不斷深入,用戶訪問量、數據量越來越大,數據庫規模也隨之不斷擴大,數據庫系統的性能、編程效率和系統運行效率等問題就越來越突出,因此,除系統架構設計合理外,如何對數據庫和程序代碼進行調優是系統高效運行的關鍵。
目前油田大系統開發中基本都采用了Oracle作為數據庫服務器。Oracle數據庫服務器是高度可優化的軟件產品,經常性的調整可以優化應用系統性能,防止出現系統瓶頸。數據庫性能優化的基本原則就是:通過盡可能少的磁盤訪問獲得所需的數據。對Oracle數據庫進行性能調整時,應按照一定的順序進行,這樣避免系統開發后期或完成后,出現一些不必要的或者代價很大的調整。系統開發前期要充分對系統進行詳細的優化設計,從如下3個階段入手。
為了充分利用Oracle數據庫的功能特性,設計系統時,根據業務情況(訪問量或客戶端數量)和現有資源狀況(服務器配置)考慮系統架構和數據庫邏輯結構的設計,對其邏輯結構和物理結構進行優化設計,使之在滿足需求條件的情況下,系統性能達到最佳,系統開銷達到最小。
采取操作系統級、數據庫級的一些優化措施來使系統性能最佳。
1.1.1 調整硬盤 I/O
在應用系統開發之前,DBA可將組成同一個表空間的數據文件放在不同的硬盤上,做到硬盤之間I/O負載均衡。在磁盤比較富裕(空間換時間)的情況下還應遵循以下原則:用戶表空間與系統表空間分開磁盤存放;創建表和索引時指定不同的表空間;創建回滾段專用的表空間,防止空間競爭影響事務的完成;創建臨時表空間用于排序操作,盡可能防止數據庫碎片存在于多個表空間中。
1.1.2 確定數據塊大小和存儲參數
由于數據庫塊的大小在數據庫創建以后就不能再修改,因此為了減少數據鏈接和行遷移,又提高磁盤空間的利用率,在設計數據庫時要確定合適的數據塊大小和存儲參數。通常我們是根據樣例數據確定數據塊大小,而根據業務現狀和未來發展趨勢確定存儲參數。
1.1.3 恰當使用分區、索引及存檔功能
業務數據量隨著應用時間不斷增長,考慮存放該數據庫表使用Oracle數據庫的分區功能;對于經常訪問的數據庫表建立索引;對于經常訪問但是當業務流程完成后不再變動的數據,采用放入歷史檔案的方法來實現應用系統中訪問盡可能少的數據量。
程序優化是指對解決同一問題的幾個不同的程序,進行比較、修改、調整程序,把一般程序變換為語句最少、占用內存量少、處理速度最快、外部設備分時使用效率最高的最優程序。
良好的SQL語句可以被數據庫重復使用而減少分析時間;恰當地使用索引可使訪問數據塊大大減少,從而減少響應時間。應用程序的執行最終將歸結為數據庫中的SQL語句執行,因此SQL語句的執行效率決定了系統運行的性能。
2.1.1 減少訪問數據庫次數
當執行每條SQL語句時,O racle內部執行了許多工作,相當費時,因此單條語句執行,變多條語句組合一起執行,能夠達到效率與易用的最佳結合,減少網絡傳輸次數,可節省很多系統運行時間,如下語句:+

循環S QL數組,每次循環都產生一條SQL語句,若在循環體內依次執行,增加了數據庫的連接和關閉次數,嚴重降低系統運行效率,若采用將數組保存在SQL語句,一起執行,只需一次數據庫的連接就可以執行多條SQL語句。
2.1.2 select子句中避免使用“*”
O racle在解析過程中會將“*”依次轉換成所有列名,這將意味著耗費更多的時間,因此,在使用select語句時,最好寫全列名。
但有一點特殊,計算記錄條數語句 Count(*)卻比 count(1)稍快,如果可以通過索引列檢索,對索引列的計數仍是最快的。
一次性取出數據存于虛擬表中供程序處理,利用內存的高速性,達到提高程序處理速度的目的。反之,把處理的數據先存于虛擬表中,處理好后再一次性存入實表中,也可達到同樣目的。
減少循環和嵌套語句結構,循環和嵌套層數越多,運算速度越慢(相對重復執行的語句多),減少循環和嵌套層數,或不用循環嵌套語句,就可提高程序執行速度。
有時為了提高數據處理、查詢速度,可適當增加一些中間表、一些多余的數據項,以達到提高系統效率的目的。
如:(1)把計算項、合計項存入表中,來提高查詢速度。
(2)建立輔助表,描述單表間關系,方便編程,提高程序運行效率。
如天然氣裝置運行成本對標系統中成本核算統計表中的HJL(合計量)、HJZQ(合計周期)字段,就是為提高數據匯總查詢及讀取速度而增加的數據項。
設計錄入功能時,把很多數據檢驗放到客戶端,對于每個用戶而言,其計算機只承擔自身的工作,若將大量的數據檢驗都放到服務器端,其要承擔很大的壓力,占用很多服務器和網絡資源。所以客戶端與服務器大量交互式的最佳優化模式就是客戶端校驗的效率與易用的最佳結合,以及盡量減少數據的網絡傳輸。
配置性能高配的服務器,為系統提供高質量硬件平臺;配置智能三層交換機,保證網絡高效、穩定運行。
隨著計算機軟硬技術的迅猛發展,系統開發的軟硬環境也越來越復雜,如今系統開發模式已發展成了多用戶的網絡模式,在網絡模式下的多用戶系統開發過程中,編程技巧的使用不僅是高效系統開發的基礎,更是系統高效運行的保障。