Oracle Freelist和HWM原理及效能最佳化(轉)

ba發表於2007-08-17
Oracle Freelist和HWM原理及效能最佳化(轉)[@more@]近期來,FreeList的重要作用逐漸為Oracle DBA所認識,網上也出現一些相關的討論。本文以FreeList為線索對Oracle的儲存管理的原理進行較深入的探討,涉及Oracle段區塊管理的原理,FreeList演算法等。而與FreeList密切相關的一個重用特性HWM,與sql效能密切相關,本文也作了原理分析介紹。在原理探討的基礎上,介紹了常用的儲存引數分析方法,並對所涉及的儲存最佳化、HWM的最佳化和Freelist競爭最佳化作了說明。

縮略語:

ASSM:auto segement space management

HWM:high water mark

DBA:data block address

OLTP:online transaction process

OPS:oracle parallel server

1.簡介

Oracle的空間管理和儲存引數管理是Oracle管理及最佳化的重要部分。FreeList作為Oracle底層儲存引數中的核心引數,其行為方式對Oracle的儲存管理及效能最佳化有重大影響,而現有的Oracle文件對此方面的內容比較缺乏。雖然Oracle 9i已出現了ASSM,但是作為深入調優對FreeList認識仍是必要的。

近期來,FreeList的重要作用逐漸為Oracle DBA所認識,網上也出現一些相關的討論。本文以FreeList為線索對Oracle的儲存管理的原理進行較深入的探討,涉及Oracle段區塊管理的原理,FreeList演算法等。而與FreeList密切相關的一個重用特性HWM,與sql效能密切相關,本文也作了原理分析介紹。在原理探討的基礎上,介紹了常用的儲存引數分析方法,並對所涉及的儲存最佳化、HWM的最佳化和Freelist競爭最佳化作了說明。

這些原理分析和效能最佳化都建立在探討的基礎上,限於篇幅和本人經驗可能存在侷限、偏差或謬誤。

為了準確文中部分結構和欄位的說明直接用英文描述。限於篇幅本文不對同樣很重要的block結構作更深入的討論,對OPS效能有重要影響的free list group本文也未提及,因此本文在單一free list group下討論。對於block的深入討論、free list group的介紹與最佳化以及PCTUSED和PCTFREE等重要引數的最佳化請參見參考文獻和資料。

2.原理探討

FreeList作為一個Oracle儲存管理的核心引數。其行為方式由Oralce內部控制,我們一般不需要掌握和控制。但是我們可能會遇到這些問題,當插入一條記錄,會插入到那個塊中?是使用新塊,還是插入有資料的老塊?段是什麼時候擴充套件的,如何擴充套件的?表中只有一條記錄,但是作一次select時代價卻是上千個塊,為什麼?如果我們從原理上清楚了Oracle的儲存管理方式,對相關這些問題的解決及效能最佳化就清晰自然了。

2.1 Oracle的邏輯儲存結構

Oralce的邏輯儲存結構按表空間,段,區,塊進行管理。塊是Oracle用來管理儲存空間的最基本單元,Oracle資料庫在進行輸入輸出操作時,都是以塊為單位進行邏輯讀寫操作的。區由一系列連續的塊組成,Oralce在進行空間分配、回收和管理時是以區為基本單位的。段由多個區組成,這些區可以是連續的也可以是不連續的,一般情況下一個物件擁有一個段。表空間中容納段和區。

在生成段的時候,會同時分配初始區(initial extents), 初始區的第一個塊就格式化為segment header,並被用來記錄free list描述資訊、extents資訊,HWM資訊等。

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

相關文章