Oracle逻辑空间管理
生活随笔
收集整理的這篇文章主要介紹了
Oracle逻辑空间管理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
整理自Oracle 11g R2 官方文檔《concepts》
001 ? ? Oracle?數據庫必須使用邏輯空間管理來在表空間中跟蹤并分配擴展區。當數據庫對象需要擴展區時,該數據庫必須有查找和分配擴展區的方法。同樣,當對象不再需要擴展區時,數據庫必須提供一種方法來重用可用空間。
? ? Oracle?數據庫基于您創建的表空間的類型來管理其中的空間。您可以創建下列類型的表空間之一:
? ? ? ? ·本地管理表空間 (默認值)
? ? 數據庫使用表空間本身中的位圖來管理擴展區。因此,本地管理表空間需要預留表空間的一部分用于位圖。在一個表空間中,數據庫可以使用自動段空間管理(ASSM)或手動段空間管理(MSSM)來管理段。
? ? ? ? ·字典管理表空間
? ? 數據庫使用數據字典來管理擴展區。
圖?12-3?顯示了一個表空間中的邏輯空間管理方法的可選方案。
002 本地管理表空間
? ? 本地管理表空間在數據文件頭中維護一個位圖,以跟蹤數據文件體中的可用空間和已用空間。每一位對應一組塊。當空間被分配或釋放時,Oracle?數據庫更改位圖值,以反映數據塊的新狀態。下面的圖形是位圖管理存儲的概念表示。標頭中的1是指已用空間,而0指可用空間。
本地管理表空間具有如下優勢:
·避免使用數據字典來管理擴展區
? ? 如果消耗或釋放一個擴展區會導致在數據字典表或撤消段中消耗或釋放空間,則在字典管理的表空間中會發生遞歸操作。
·自動跟蹤相鄰的可用空間
? ? 通過這種方式,數據庫消除了合并空閑擴展區的需要。
·自動確定本地管理擴展區的大小
? ? 或者,在本地管理表空間中所有的擴展區可以具有相同的大小,并覆蓋對象存儲選項。
?注意:Oracle?強烈建議使用自動段空間管理的本地管理表空間。
003 段空間管理 ? ??段空間管理是一個從包含該段的表空間繼承來的屬性。在一個本地管理表空間中,數據庫可以自動地或手動地管理段。例如,users?表空間中的段使用自動管理,而?tools?表空間中的段使用手動管理。 3-1 自動段空間管理(ASSM,automatic segment space management)
? ? ASSM?方法使用位圖管理空間。位圖提供了以下優點:
????·簡化管理
? ? ASSM?可以避免手動確定許多存儲參數的正確設置的需要。只有一個很關鍵的控制空間分配的SQL?參數:PCTFREE。此參數指定要為塊中保留用于將來的更新的空間百分比。
????·增強并發性
?多個事務可以搜索多個相互獨立的空閑數據塊列表,從而減少爭用和等待。對很多標準工作負載,使用?ASSM?的應用程序性能比使用優化得很好的使用?MSSM?的應用程序性能更好。
????·對Oracle?真正應用集群(Oracle RAC)環境中實例的空間動態親合性
? ? ASSM?更有效,并且是永久性本地管理表空間的默認值。 3-2?手動段空間管理(MSSM,manual segment space management) ? ? 舊式的MSSM?方法使用稱為空閑列表的鏈表來管理段中的可用空間。對一個具有可用空間的數據庫對象,有一個空閑列表會跟蹤位于高水位線?(HWM)?之下的數據塊,所謂高水位,即已使用段空間和未使用段空間之間的分界線。當塊被使用時,數據庫根據需要將塊放入空閑列表,或將塊從空閑列表中刪除。
? ? 除了PCTFREE,MSSM?需要您使用額外的幾個SQL?參數(如?PCTUSED、FREELISTS、和FREELIST GROUPS)來控制空間分配。PCTUSED設置在當前使用塊中必須存在的可用空間百分比,當使用率低于該百分比時,數據庫會將其放入空閑列表中。例如,如果CREATE TABLE?語句中設置PCTUSED為40,則只有當塊空間使用少于40%的情況下, 您才能往段中的塊插入新行。
? ? 作為一個說明,假設向一個表中插入行。數據庫檢查該表的空閑列表,以查找第一個可用的塊。如果行無法容納進該塊中,并在塊中已使用空間大于或等于PCTUSED,則數據庫將該塊從空閑列表中移除,并搜索另一個塊。如果從塊中刪除行,則數據庫檢查塊中的已使用空間現在是否小于?PCTUSED。如果是,則數據庫將該塊置于空閑列表的開頭。 ? ? 一個對象可能有多個空閑列表。通過這種方式,在表上執行DML?的多個會話可以使用不同列表,以減少爭用。每個數據庫會話在其會話持續時間只使用一個空閑列表。 ? ? 如圖12-4?所示,你也可以創建具有一個或多個空閑列表組的對象,空閑列表組是空閑列表的集合。每個組有一個主空閑列表,用于管理組中的各個的處理空閑列表。空閑列表、尤其是空閑列表組的空間開銷,可能非常顯著。
? ? 手動管理段空間可能會很復雜。您必須調整PCTFREE?和PCTUSED,以減少行遷移和避免空間浪費。例如,如果段中的每個使用的塊是半滿,并且PCTUSED?是40,則數據庫不允許向這些塊插入新行。由于微調空間分配參數很困難,Oracle?強烈建議使用ASSM。在ASSM中,由PCTFREE?確定是否可以將新行插入一個塊中,但它不使用空閑列表,并忽略PCTUSED。
004 字典管理表空間
????字典管理表空間使用數據字典來管理其擴展區。每當分配或釋放了一個擴展區時,Oracle?數據庫更新數據字典中的表。例如,當表需要擴展區時,數據庫查詢數據字典表,并搜索空閑擴展區。如果數據庫找到了空間,則修改一個數據字典表,并插入一行。按這種方式,數據庫通過修改和移動數據來管理空間。
????數據庫在后臺為數據庫對象獲取空間而執行的SQL?是遞歸SQL。頻繁使用遞歸SQL?可能會對性能有負面影響,因為必須串行化對數據字典的更新。而默認的本地管理表空間避免了這種性能問題。
001 ? ? Oracle?數據庫必須使用邏輯空間管理來在表空間中跟蹤并分配擴展區。當數據庫對象需要擴展區時,該數據庫必須有查找和分配擴展區的方法。同樣,當對象不再需要擴展區時,數據庫必須提供一種方法來重用可用空間。
? ? Oracle?數據庫基于您創建的表空間的類型來管理其中的空間。您可以創建下列類型的表空間之一:
? ? ? ? ·本地管理表空間 (默認值)
? ? 數據庫使用表空間本身中的位圖來管理擴展區。因此,本地管理表空間需要預留表空間的一部分用于位圖。在一個表空間中,數據庫可以使用自動段空間管理(ASSM)或手動段空間管理(MSSM)來管理段。
? ? ? ? ·字典管理表空間
? ? 數據庫使用數據字典來管理擴展區。
圖?12-3?顯示了一個表空間中的邏輯空間管理方法的可選方案。
002 本地管理表空間
? ? 本地管理表空間在數據文件頭中維護一個位圖,以跟蹤數據文件體中的可用空間和已用空間。每一位對應一組塊。當空間被分配或釋放時,Oracle?數據庫更改位圖值,以反映數據塊的新狀態。下面的圖形是位圖管理存儲的概念表示。標頭中的1是指已用空間,而0指可用空間。
本地管理表空間具有如下優勢:
·避免使用數據字典來管理擴展區
? ? 如果消耗或釋放一個擴展區會導致在數據字典表或撤消段中消耗或釋放空間,則在字典管理的表空間中會發生遞歸操作。
·自動跟蹤相鄰的可用空間
? ? 通過這種方式,數據庫消除了合并空閑擴展區的需要。
·自動確定本地管理擴展區的大小
? ? 或者,在本地管理表空間中所有的擴展區可以具有相同的大小,并覆蓋對象存儲選項。
?注意:Oracle?強烈建議使用自動段空間管理的本地管理表空間。
003 段空間管理 ? ??段空間管理是一個從包含該段的表空間繼承來的屬性。在一個本地管理表空間中,數據庫可以自動地或手動地管理段。例如,users?表空間中的段使用自動管理,而?tools?表空間中的段使用手動管理。 3-1 自動段空間管理(ASSM,automatic segment space management)
? ? ASSM?方法使用位圖管理空間。位圖提供了以下優點:
????·簡化管理
? ? ASSM?可以避免手動確定許多存儲參數的正確設置的需要。只有一個很關鍵的控制空間分配的SQL?參數:PCTFREE。此參數指定要為塊中保留用于將來的更新的空間百分比。
????·增強并發性
?多個事務可以搜索多個相互獨立的空閑數據塊列表,從而減少爭用和等待。對很多標準工作負載,使用?ASSM?的應用程序性能比使用優化得很好的使用?MSSM?的應用程序性能更好。
????·對Oracle?真正應用集群(Oracle RAC)環境中實例的空間動態親合性
? ? ASSM?更有效,并且是永久性本地管理表空間的默認值。 3-2?手動段空間管理(MSSM,manual segment space management) ? ? 舊式的MSSM?方法使用稱為空閑列表的鏈表來管理段中的可用空間。對一個具有可用空間的數據庫對象,有一個空閑列表會跟蹤位于高水位線?(HWM)?之下的數據塊,所謂高水位,即已使用段空間和未使用段空間之間的分界線。當塊被使用時,數據庫根據需要將塊放入空閑列表,或將塊從空閑列表中刪除。
? ? 除了PCTFREE,MSSM?需要您使用額外的幾個SQL?參數(如?PCTUSED、FREELISTS、和FREELIST GROUPS)來控制空間分配。PCTUSED設置在當前使用塊中必須存在的可用空間百分比,當使用率低于該百分比時,數據庫會將其放入空閑列表中。例如,如果CREATE TABLE?語句中設置PCTUSED為40,則只有當塊空間使用少于40%的情況下, 您才能往段中的塊插入新行。
? ? 作為一個說明,假設向一個表中插入行。數據庫檢查該表的空閑列表,以查找第一個可用的塊。如果行無法容納進該塊中,并在塊中已使用空間大于或等于PCTUSED,則數據庫將該塊從空閑列表中移除,并搜索另一個塊。如果從塊中刪除行,則數據庫檢查塊中的已使用空間現在是否小于?PCTUSED。如果是,則數據庫將該塊置于空閑列表的開頭。 ? ? 一個對象可能有多個空閑列表。通過這種方式,在表上執行DML?的多個會話可以使用不同列表,以減少爭用。每個數據庫會話在其會話持續時間只使用一個空閑列表。 ? ? 如圖12-4?所示,你也可以創建具有一個或多個空閑列表組的對象,空閑列表組是空閑列表的集合。每個組有一個主空閑列表,用于管理組中的各個的處理空閑列表。空閑列表、尤其是空閑列表組的空間開銷,可能非常顯著。
? ? 手動管理段空間可能會很復雜。您必須調整PCTFREE?和PCTUSED,以減少行遷移和避免空間浪費。例如,如果段中的每個使用的塊是半滿,并且PCTUSED?是40,則數據庫不允許向這些塊插入新行。由于微調空間分配參數很困難,Oracle?強烈建議使用ASSM。在ASSM中,由PCTFREE?確定是否可以將新行插入一個塊中,但它不使用空閑列表,并忽略PCTUSED。
004 字典管理表空間
????字典管理表空間使用數據字典來管理其擴展區。每當分配或釋放了一個擴展區時,Oracle?數據庫更新數據字典中的表。例如,當表需要擴展區時,數據庫查詢數據字典表,并搜索空閑擴展區。如果數據庫找到了空間,則修改一個數據字典表,并插入一行。按這種方式,數據庫通過修改和移動數據來管理空間。
????數據庫在后臺為數據庫對象獲取空間而執行的SQL?是遞歸SQL。頻繁使用遞歸SQL?可能會對性能有負面影響,因為必須串行化對數據字典的更新。而默認的本地管理表空間避免了這種性能問題。
總結
以上是生活随笔為你收集整理的Oracle逻辑空间管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux工具快速上手,Linux很实用
- 下一篇: Tornado学习笔记(四)