應用系統生命週期中資料庫優化

yxyup發表於2009-07-24
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 資料庫優化是資料庫管理工作中的最重要和最複雜的工作之一。由於資料庫不是孤立的資料庫,而是和一些應用具有緊密關係的,資料庫往往是應用系統中最關鍵的部分,因此資料庫的優化不能完全脫離應用而進行。實踐證明,資料庫管理維護人員與應用開發者的合作越好,資料庫的優化越成功。

另外,資料庫優化是從應用系統開始規劃到應用系統退役整個過程中都在不斷進行的,因此,資料庫優化是一個長期的工作。很多人會希望通過一次優化就達到一勞永逸的效果,而沒有樹立資料庫優化工作長期性的觀念,這樣往往會導致資料庫在長期的系統執行過程中沒有得到必要的維護,以至於一旦發生問題,將會造成很大的損失。

資料庫優化是一個貫穿於應用系統整個生命週期的長期工作,資料庫優化應該從需求調研和需求分析開始。從另一個方面講,資料庫優化也不僅是某人某部門的工作,而是需要全員參與的(業務人員、開發人員、DBA 甚至專案和使用者的領導層)。

資料庫優化需要全員參與和貫穿整個開發過程,很多沒有應用開發經驗的DBA 可能很難理解這一點,而這一點是資料庫優化工作中最關鍵的一點。比如說,具有豐富開發經驗的專案管理者都清楚,改變使用者的操作習慣是一種十分困難的事情,而在使用者沒有形成習慣之前灌輸一種操作方法要容易的多。因此在需求調研的時候說服使用者不要使用那些對資料庫開銷十分大的操作方式,可以大大減少使用者不適當操作而引起的對系統的開銷。這就要求在需求調研和分析階段要實現這一點,在必要的時候,甚至需要得到高層領導的支援。在軟體開發和應用的各個階段中,應該注意以下的問題:

 (1) 在需求開發階段,資料庫優化的目的是說服業務人員接受對資料庫影響比較小的操作習慣,而放棄那些多資料庫效能有致命影響的操作習慣.

 (2) 在系統應用架構設計階段,採用對資料庫優化比較有利的應用體系架構。採用2 層還是三層架構,使用B/S 方式還是C/S 方式,採用瘦客戶端還是胖客戶端,客戶端和伺服器之間資料交換的報文的格式和內容組織方式等都會影響資料庫訪問的效能.

 (3) 在系統邏輯設計階段,定義合理的資料結構和資料操作方式

 (4) 在物理設計階段,設計合理的表和索引的物理儲存結構

 (5) 在編碼階段,編寫效率比較高的SQL.

 (6) 在系統測試階段,對於關鍵業務進行完整的壓力測試和系統效能評估,找出系統的瓶頸,儘快改進應用

 (7) 在系統執行階段:系統投入正式執行後,資料庫的優化工作還是十分艱鉅的工作。DBA 實時監控資料庫的情況,及時發現資料庫存在的問題,及時進行調整。DBA 還需要定期進行行鏈消除、索引重建、表空間碎片整理、歷史資料備份整理和系統分析等工作。對於應用中存在的效能問題,及時發現,並及時通知開發人員改進,並對改進後的應用進行測試評估.

 

需求開發階段的資料庫優化

需求開發分為客戶需求獲取、需求分析兩個階段,最終產品為軟體需求規格書(SRS)。在傳統的概念中,這個需求開發和資料庫優化是風馬牛不相及的事情,而這個階段往往是對系統效能優化最為關鍵的階段。在這個階段主要考慮的是軟體的功能需求,而這些需求中,可能存在一些對系統效能影響極大的需求。操作習慣、介面風格、統計計算方法等都會影響資料庫的效能。

以下是一個曾經親身遇到的案例,某個系統在顯示主選單的時候,需要顯示一些複雜的實時統計分析結果,而這個統計分析結果只有很少數的人會真正關心,由於這個系統有幾百個使用者在使用,而主選單是進入每個模組的必經之路,因此係統執行一段時間後,就出現了CPU 方面的瓶頸。為了解決這個問題,想盡了一切方法對SQL 進行優化,但是收效甚微。後來經過分析應用後提出了一個方案,重新修改了主選單的介面,預設情況下不顯示實時統計結果,而只是提供一個顯示實時統計結果的連結。而對於需要每次顯示主選單都顯示實時統計結果的使用者,只需要在自己的PROFILE 中設定該選項就可以了。主選單修改後,使用實時統計的使用者只有1%左右,CPU 的瓶頸問題也就迎刃而解了。

上述這種優化如果在需求分析階段就能夠完成,那麼可以避免很多問題。

 

系統設計階段的資料庫優化

系統設計階段包括系統架構設計、邏輯設計、物理設計等子階段。系統架構對於資料庫的效能影響也是十分巨大的,採用不同的系統架構,對後續的設計和應用開發都具有十分大的影響,不合理的系統架構甚至會造成專案的失敗。

在邏輯設計階段,需要進行資料模型的邏輯建模。一個具有十分豐富的邏輯設計經驗的系統設計人員來說,建立一套完美的符合第三正規化的邏輯模型不是什麼難事。但是從資料庫的效能角度來考慮,第三正規化不一定是最佳的選擇,有時候為了避免效能問題,設計一定的冗餘資料,也是十分必要的。因此在這個階段也存在形成效能瓶頸的風險。

在物理設計階段,需要對資料庫進行物理建模。物理建模是決定系統效能的關鍵,IO 負載如何均衡、如何避免行鏈、如何建立合理的索引,等等,都需要在這個階段設計完成。

 

軟體開發階段的資料庫優化

如果在需求和設計階段避免了各種效能瓶頸,那麼應用軟體開發階段的效能優化工作就會輕鬆很多。但是由於軟體開發階段涉及的人員較多,並且每個開發人員的能力有所不同,因此在這個階段也是容易造成效能問題擴散的主要階段。這個階段產生的效能問題往往是分散的,集中於某些不夠優化的SQL 程式碼。所以SQL 稽核也是很有必要的工作。

 

系統測試階段的資料庫優化

如果在前面的各個階段,都已經對資料庫的效能進行了優化,那麼系統測試階段是解決遺留系統效能問題的最佳階段,由於系統開發已經完成,因此整合測試和系統測試成為可能,很多在系統測試階段才可能暴露出來的效能問題可以得到充分的暴露,而且由於系統還沒有正式上線,因此係統調整和優化的代價也很小。

 

系統執行階段的資料庫優化

系統執行階段的資料庫優化是傳統意義上的資料庫優化範疇的工作。當系統正式上線後,系統的優化往往受到很多的限制,因此優化的手段也較前幾個階段少,優化的成本也大大增加。在系統執行階段,往往是由於缺乏嚴格的日常維護,因此很多系統效能隱患沒有及時發現,等到發現問題的時候,往往已經錯過了解決問題的最好時機,並且由於生產系統給與問題解決的時間有限,往往造成解決問題的時間嚴重不足。為了避免上述問題的出現,在系統執行階段,加強系統日常的監控和維護是十分必要的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7364032/viewspace-610367/,如需轉載,請註明出處,否則將追究法律責任。

相關文章