程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> 在Oracle9i中使用多種Block Size

在Oracle9i中使用多種Block Size

編輯:關於Oracle數據庫

  Oracle9i為Oracle數據庫引擎帶來了一些令人吃驚的復雜性。它推出了許多新的內部特性,包括bitmap free lists,基於redo log的復制,動態SGA,還有一個可能是最重要的特性,可以支持多種塊大小(Block Size)。

  當你忽略全部的高級特性時,Oracle的工作就是傳送數據,磁盤的I/O管理和調整對於任何的Oracle數據庫都是一個重要的部分。任何可以令磁盤I/O減少的工作都對Oracle數據庫系統有一個正面的影響。

  如果我們查看一下各種各樣調整Oracle數據庫性能的方法,就會發現其實Oracle性能調整的共同目標都是減少磁盤的I/O。例如,調整一個SQL語句以除去一個全表搜索的操作可以令查詢運行得更快,因為這樣可以直接地減少需要由磁盤上讀取的數據塊。調整實例的參數,例如DB_CACHE_SIZE也可以減少磁盤的開銷。

  要理解怎樣使用多種塊大小來提升Oracle數據庫的性能,我們首先查看一下磁盤I/O的基本特性。任何時候由磁盤上訪問一個Oracle數據塊時,我們通常會見到三種延遲。第一種也是最重要的延遲來源於讀-寫頭的移動時間。這個時間是指讀-寫頭需要將自己定位到正確的柱面所需要的時間。還有選擇延遲的時間,這是讀-寫頭等待相應的塊出現在它的下面,第三個延遲來源於將數據由磁盤傳回到Oracle SGA。

  其實99%的延遲都是在真正訪問實際數據塊前發生的,那麼我們就可以知道讀取一個32K的塊所需要的時間其實和讀取一個2K大小的塊相差不大。也就是說,磁盤的延遲時間都是差不多的,它和塊的大小無關。因此我們可以得出這樣的結論:如果每次I/O都能夠讀取最大的塊,那麼Oracle數據庫所需要的整體I/O就會變少。

  緩沖的原理並不是Oracle數據庫特有的。對於內存的訪問是以納秒計算的,而對磁盤的訪問通常是用毫秒計算的。如果我們可以將Oracle的數據塊都放入磁盤的緩沖中,性能將有著很大的提升。隨著Oracle的成熟和內存變得越來越便宜,我們將會發現Oracle數據庫的系統全局空間(SGA)的大小通常都超過10GB。這樣對於Oracle數據庫的性能有著很大的提升,因為在讀取時,Oracle數據塊都處在內存中,相對於需要由磁盤上得到數據塊,這樣將會快成千上萬倍。

  內存緩沖中保留著Oracle訪問過的數據塊,在緩沖中的數據讀取速度要比由磁盤中讀取要快14,000倍。內存數據緩沖已經由Oracle7的單一緩沖發展為Oracle8i中的三個數據緩沖。它們的名字分別是KEEP pool,RECYCLE pool和 DEFAULT pool(如圖1所示)。

  ****************圖一***************

  Oracle數據緩沖

  在Oracle9i中我們仍然有三個數據緩沖,不過我們還可以為Oracle服務器支持的每個塊大小創建一個數據緩沖(如圖2所示)。

  ************圖2-Oracle9i的8個數據緩沖*******

  在每個數據緩沖中,由數據緩沖的命中率可以知道一個數據塊處在內存中的可能性。在數據緩沖間分配內存頁以確保內存緩沖的最優利用是Oracle管理員的工作。有時通過增加一些緩沖就有明顯的效果(見圖3)

  ************圖三***************

  (增加到一個小的數據緩沖的內存頁)

  隨著內存緩沖的增加,增加頁面帶來的好處就會下降(如圖4所示)。

  **************圖4***************

  在大的數據緩沖下,由此而帶來的好處下降

  索引和大的數據塊

  在Oracle9i前,Oracle的專家發現通過將整個數據庫移植到更大的數據塊,可以減少磁盤的I/O,從而令整個系統的性能得到提升。由表面看來這有點不符合常理,人們可能會問"如果我只需要一個80字節的行,那麼讀取16K的塊又有什麼好處呢?"

  這個問題的答案和索引有關。大部分經過很好地調優的Oracle數據庫都擁有和表數據差不多大小的索引。對於索引來說,大的數據塊無疑可以減少I/O,從而可以提升整個數據庫的性能。

  所以,Oracle9i數據庫管理員要做的第一件事可能就是創建一個32K的表空間,一個相應的32K大小的數據緩沖,然後將他們系統中的全部索引移植到這個32K的表空間中。通過這樣,Oracle9i數據庫就可以在一次磁盤I/O中讀取相當數量的索引節點分枝,因此可以減輕系統的壓力並且提高總體的性能。

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