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