2011-06-04 49 views
0

我不是DBA,我只是想了解Oracle的多版本併發模型。關於oracle的undo段綁定的問題

啓動DML操作時,MVCC協議的第一步是綁定一個還原段。問題是爲什麼一個還原段只能用於一個活動事務?

感謝您的時間~~

+0

對不起。由於我的錯誤點擊,我在完成之前提交了我的問題。 – user770957 2011-06-04 07:05:54

回答

1

多版本併發可能是把握當談到甲骨文最重要的概念。即使他們不想成爲DBA,程序員也能理解它。

對此有幾個方面,但它們都歸結爲效率:撤消管理是開銷,因此儘量減少致力於它的週期數量有助於數據庫的整體性能。

  1. 事務可以由許多語句組成,並生成大量的撤消操作:它可能會插入一行,它可能會刪除三萬個。最好在開始時分配一個空的UNDO區塊,而不是連續地搜尋有足夠空間的部分填充區塊。
  2. 其次,共享撤消塊需要內核以更精細的粒度跟蹤使用情況,這只是增加了複雜性。
  3. 當事務完成時,撤銷被釋放(除非,見下一點)。事務使用的塊越少,鎖存器的數量就越少。另外,如果塊是共享的,我們將不得不釋放塊的碎片,這只是更多的努力。
  4. 關於MVCC的關鍵是讀一致性。這意味着由長時間運行的查詢返回的所有記錄都將以查詢開始時的狀態顯示。因此,如果我在EMP表上發出一個SELECT需要15分鐘運行的時間,並且通過您提交所有工資的更新,我將不會看到您的更改,數據庫通過從您的事務使用的塊中檢索撤消數據。再一次,當所有的撤消數據在一個或兩個塊中並置時,這會容易得多。
+0

我不認爲第4點是非常正確的。其他會話將使用第一次會話更新所創建的撤銷來維持讀取一致性,但不保證這些撤消塊在這些查詢處於活動狀態時不會被重用。重複使用這種撤銷會導致臭名昭着的「快照太舊」的錯誤。 – 2011-06-04 13:38:19

+0

@DaveCosta - 公平點 – APC 2011-06-04 16:48:15

1

「爲什麼一個還原段只能用於一個活動事務?」

這只是一個設計決定。這就是撤消細分市場的設計方法。我想這是爲了解決前面的回滾機制可能發生的一些問題。

回滾(仍然可用,但不贊成撤消)包括由DBA顯式創建回滾段,並且可以將多個事務分配給單個回滾段。這存在一些缺點,最明顯的是,如果分配給給定分段的一個事務產生足夠的回滾數據,並且該分段已滿(並且不能再擴展),則使用相同分段的其他事務將不能執行任何將產生的操作回滾數據。

我在猜測新的撤消功能的一個設計目標是爲了防止這種事務間依賴。因此,他們設計了這種機制,以便DBA調整大小並創建撤消表空間,但其中的分段管理由Oracle在內部完成。這允許每筆交易使用專用細分。如果表空間填滿(並且不能自動擴展),它們仍然可能造成彼此的問題,但是在分段級別,不會有一個事務可能導致另一個事務出現問題。