台灣最大程式設計社群網站
線上人數
1584
 
會員總數:245257
討論主題:189113
歡迎您免費加入會員
討論區列表 >> Oracle >> 【轉載】oracle免費電子報
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
【轉載】oracle免費電子報
價值 : 100 QP  點閱數:3634 回應數:0

樓主

SHOYO
門外漢
0 7
28 0
發送站內信

http://www.performance-insight.com/china/html/ora3/back/freeblock_1_ct.html
-------------------------------------

<關於剩餘資料塊的檢驗 之1>
我們曾經收到這樣的問題:
「想知道coalesce(結合)的作用」、「如何確保剩餘資料塊、作為表的空間使用?」此外,在實際的支援工作中,也經常有客戶問到相同的問題。因此,我們將一邊檢驗這些有密切關係的項目,一邊向大家說明。

首先向大家說明「coalesce(結合)」。簡單的說,就是將空閒空間碎片合併的功能,通常SMON每隔5分鐘就會自動執行一次(以前是每隔2小時一次)。要具體說明空閒空間碎片, 例如DROP物理上相鄰的10M的表A和20M的表B之後,讓空間開放,變成空閒空間。原本相鄰的空間中會殘存extent邊界。

舉例來說,在這種情況下,即使想建立25M的表,也會因為空間不足而無法建立。這時候,「coalesce(結合)」的功能就非常重要。簡單的說,這項功能的作用就是消除extent邊界。這樣一來就能確保有30M的空閒空間,可以創建 25M的表C。 (如果空閒空間實際上並不相鄰,那麼就算執行「coalesce(結合)」,結果當然也不會改變。要是動態整理空閒空間的配置,處理過程會變得非常沉重。)那麼,在什麼時間點會進行「coalesce(結合)」呢?

1. 執行alter tablespace <表空間名> coalesce 的時候
2. 每隔5分鐘smon會自動執行一次(僅限於設定為表空間pctincrease 0以外的表空間)
3. 不論是否設定為pctincrease 0,假如不執行coalesce,就沒有足夠的空閒空間分配為extent

現在就讓我們來檢驗各種情況吧。
在1. 的情況下會執行「coalesce(結合)」是很理所當然的,但是我們要看看在Oracle內部究竟發生了什麼動作。首先,查查看V$LOCK這個dictionary (在DBA_OBJECTS裡V_$LOCK是畫面, V$LOCK是其中的SYNONYM)。 *************************************************************
ADDR KADDR SID TYPE ID1 ID2 LMODE CTIME
-----------------------------------------------------------
01002F48 01003014 9 TX 131076 3480 6 0
8009634C 80096360 9 TM 12 0 3 0
80063FA8 80063FB8 9 ST 0 0 6 0
*************************************************************



ID1、ID2會根據TYPE不同而儲存不同的資訊,TM表示對於表的更新鎖,ID1表示物件ID。ID1是12,代表的對象是叫作FET$的表,是管理剩餘空間的表。經常使用的DBA_FREE_SPACE畫面就是根據FET$作成的。TX是表示對於更新處理的回滾(rollback)資訊。

通常update的時候, TM和TX是一組,LMODE分別是以3(row exclusive)和6(exclusive)取得。更具體的說,TM的LMODE 3在FET$加上表鎖,所以無法從其他程式對FET$進行alter table或drop table。TX的LMODE 6是讓rollback segment中正在使用的部分,無法從其他程式使用。

這時候的ID1和ID2是表示rollback segment的場所。無法鎖住同一列,是因為取得了這個TX的6。上面的V$LOCK的例子是典型的例子,代表對FET$執行了更新。TYPE是ST,代表ST enqueue (Space transaction enqueue),每一個instance上只會有一個。Truncate和direct-load之類、需要直接更新space map的處理會造成加鎖的現象,coalesce(結合)的處理也會更新space map,所以會導致LMODE 6(exclusive),這種鎖存在的時候,就無法對表空間進行任何操作。

ST通常只會出現一瞬間,所以不會造成嚴重的問題,但是如果LMODE 6長時間上鎖的時候,可能就無法對表空間更新space map,當然也會妨礙其他的處理。另外,V$LOCK中有ctime(以秒為單位)的項目,可以知道上鎖的時間有多長。從V$LOCK可以了解很多資訊,希望大家一定要釐清這個dictioanry。

另外,如果各位讀者知道其他的使用方法,請不吝賜教,寫e-mail提供我們其他的例子。此外,關於這篇文章您如果有任何問題,請盡量告訴我們您的意見,我們會在今後的文章中回覆您。日後我們會繼續針對上面提到的2.和3.進行檢驗。

搜尋相關Tags的文章: [ oracle ] , [ 資料庫 ] , [ 技術 ] ,
本篇文章發表於2005-04-11 17:42
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.