程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 優化DB2數據庫應用系統性能的深入研究

優化DB2數據庫應用系統性能的深入研究

編輯:DB2教程

http://database.51cto.com/art/201008/215674.htm以下的文章主要是介紹DB2數據庫應用系統性能的優化深入研究,我們大家都知道DB2數據庫它是一種高性能的大型關系數據庫管理系統,其廣泛的應用在客戶/服務器體系結構中。評價系統性能優化的標准有:吞吐量、響應時間、並行能力等。

設計數據庫

1. 熟悉業務系統

對業務系統的熟悉程度對整個DB2數據庫系統的性能有很大影響,一個對業務不熟悉的設計人員,盡管有豐富的數據庫知識,也很難設計出性能最佳的數據庫應用系統。

2. 規范化與非規范化

數據庫被規范化後,減少了數據冗余,數據量變小,數據行變窄。這樣DB2的每一頁可以包括更多行,那麼每一區裡的數據量更多,從而加速表的掃描,改進了單個表的查詢性能。但是,當查詢涉及多個表的時候,需要用很多連接操作把信息從各個表中組合在一起,導致更高的CPU和I/O花銷。

那麼,有很多時候需要在規范化和非規范化之間保持平衡,用適當的冗余信息來減少系統開銷,用空間代價來換取時間代價。有訂單信息表OrderDetail,它裡面記錄了投遞員信息,收款員信息,物品信息,價格策略,客戶信息…..這些信息分別在投遞員信息表、收款員信息表、物品信息表、價格策略表、客戶信息表中存放。

如果按照規范化的要求,OrderDetail查詢時就必須要與這麼多個表進行連接或者嵌套查詢。如果OrderDetail表中的數據量是在百萬級的,那麼一次查詢所需要的時間可能會達到好幾個小時。事實上,只要在設計時保證數據的邏輯有效性,很多信息都可以直接冗余在OrderDetail表中,這些冗余的數據能夠極大的提高查詢的效率,從而減少CPU和I/O操作。

3. 數據條帶化

如果一個表的記錄條數超過一定的規模,那麼最基本的DB2數據庫應用系統性能查詢操作也會受到影響,需要將該表根據日期水平劃分,把最近、最經常用的數據和歷史的、不經常用的數據劃分開來,或是根據地理位置、部門等等進行劃分。

還有一種劃分方式――垂直劃分,即把一個屬性列很多的表分割成好幾個小表,比如把經常用到的屬性放在一個表裡,不經常用到的屬性放在另一個表裡,這樣可以加快表的掃描,提高效率。

4. 選擇數據類型

對每一屬性選擇什麼樣的數據類型很大程度上依據表的要求,但是在不違背表要求的前提下,選擇適當的數據類型可以提高系統性能。比如有text列存放一本書的信息,用BLOB而不是character(1024),BLOB存放的是指針或者文件參照變量,真正的文本信息可以放在數據庫之外,從而減少數據庫存儲空間,使得程序運行的速度提高。DB2提供了UDT(User Defined Datatypes)功能,用戶可以根據自己的需要定義自己的數據類型。

5. 選擇索引

索引是DB2數據庫中重要的數據結構,它的根本目的就是為了提高查詢效率。現在大多數的數據庫產品都采用IBM最先提出的ISAM索引結構。使用索引可以快速、直接、有序的存取數據。索引的建立雖然加快了查詢,另一方面卻將低了數據更新的速度,因為新數據不僅要增加到表中,也要增加到索引中。另外,索引還需要額外的磁盤空間和維護開銷。因此,要合理使用索引:

在經常進行連接,但是沒有指定為外鍵的屬性列上建立索引。

在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引。按索引來排序或分組,可以提高效率。

在條件表達式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。

如果待排序的列有多個,可以在這些列上建立復合索引(compound index),即索引由多個字段復合而成。

以上的相關內容就是對DB2數據庫應用系統性能優化深入探究的介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved