91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用在線段收縮(ONLINE SEGMENT SHRINK)回收浪費的段空間

發布時間:2020-08-10 06:44:29 來源:ITPUB博客 閱讀:275 作者:18141908802 欄目:關系型數據庫

   ONLINE TABLE REDEFINITION(在線重定義表)(詳見:《使用DBMS_REDEFINITION包執行在線重定義表(ONLINE TABLE REDEFINITION) 》:http://blog.itpub.net/23135684/viewspace-1765128/)也可以完成數據空間的回收,但是ONLINE SEGMENT SHRINK更合適單純的表空間回收,這篇文章將根據官方文檔的內容討論通過在線段收縮回收浪費的空間。

一.回收未使用空間的原理

    隨著時間的推移,針對表空間下對象的UPDATE和DELETE操作會產生個別空的空間,這些空間不是足夠的大,沒辦法被新插入的數據使用。這種類型的空空間被認為是自由空間的碎片。

    擁有自由空間碎片的對象存在空間的浪費,也會影響數據庫的性能。首選的碎片整理和空間的回收方法是執行在線段收縮(online segment shrink),這個過程會將高水位線以下的自由空間的碎片整合到一起,把段壓緊,壓緊之后,高水位線可以移動,最終的結果是新的自由空間在高水位線以上,高水位線以上的空間之后會回收(deallocated),在整個在線段回收的操作過程中段仍然可以被查詢和執行DML操作,并且沒有額外的磁盤空間需要被分配。

    使用Segment Advisor標示段是在線段回收的優勢,只有段屬于本地表空間管理和ASSM才是可行的。
如果段不符合在線段回收的要求,或者你想在回收空間的過程中改變表的邏輯或者物理屬性,可以使用在線表重定義的方式來實現段的空間回收。在線重定義被認為是重新對表的組織,和在線段回收不同,它要求分配額外的磁盤空間。

注意:SHRINK和DEALLOCATE兩個操作是有區別的,SHRINK是碎片整理,DEALLOCATE是降低高水位線,下面會對這兩個的區別進一步的說明。

二.Segment Advisor

   Segment Advisor用來鑒別Segment空間回收是否是可行的。它通過檢查使用情況,在AWR中的增長統計信息,以及段中的樣例數據來進行分析。Segment Advisor被配置成在維護窗口期間自動運行的維護任務,當然也可以手動運行它。Segment Advisor自動維護認為被叫做Automatic Segment Advisor。


Segment Advisor生成以下的建議:
1).Segment Advisor決定一個對象是否有重大的自由空間,推薦執行在線段SHRINK。如果對象對應的表不符合回收條件,Segment Advisor推薦在線表重定義。
2).Segment Advisor決定表能從壓縮或者OLTP壓縮中獲得優勢,推薦使用這種方法。
3).Segment Advisor遇到表row chain超過閥值,它記錄表大量chain row這種情況。

如果收到空間管理告警,或者你想回收空間,應該從Segment Advisor開始。

Automatic Segment Advisor不是分析數據庫的每一個對象,而是審查數據庫統計信息,段數據采樣,然后選擇一下的對象進行分析:
>表空間超過臨界點,或者空間閥值告警。
>最活躍的段。
>最高增長率的段。

Segment Advisor也手動的調用,可以通過OEM和DBMS_ADVISOR包進行調用。這里我們討論通過DBMS_ADVISOR進行調用的方法。

使用DBMS_ADVISOR包的存儲過程創建Segment Advisor工作,設置工作的屬性,然后執行這個工作。使用此包必須有ADVISOR的權限。

下面通過一個例子來討論通過DBMS_ADVISOR手動調用Segment Advisor的方法,用戶執行DBMS_ADVISOR包的存儲過程必須用此包的EXECUTE對象權限,或者ADVISOR系統權限。

注意:如果通過DBMS_ADVISOR.CREATE_OBJECT對表進行操作,如果表是一個分區表,Segment Advisor分析表的所有分區,針對每個分區生成單獨的findings和推薦。

variable id number;
begin
  declare
  name varchar2(100);
  descr varchar2(500);
  obj_id number;
  begin
  name:='Manual_Employees';
  descr:='Segment Advisor Example';

  dbms_advisor.create_task (
    advisor_name     => 'Segment Advisor',
    task_id          => :id,
    task_name        => name,
    task_desc        => descr);

  dbms_advisor.create_object (
    task_name        => name,
    object_type      => 'TABLE',
    attr1            => 'HR',
    attr2            => 'EMPLOYEES',
    attr3            => NULL,
    attr4            => NULL,
    attr5            => NULL,
    object_id        => obj_id);

  dbms_advisor.set_task_parameter(
    task_name        => name,
    parameter        => 'recommend_all',
    value            => 'TRUE');

  dbms_advisor.execute_task(name);
  end;
end; 
/

查看Segment Advisor的結果
Segment Advisor創建了幾種類型的結果,recommendations,findings,actions和objects。


方法1:通過DBMS_SPACE.ASA_RECOMMENDATIONS查看結果。
這是一種最簡單的方法。

select tablespace_name, segment_name, segment_type, partition_name,
recommendations, c1 from
table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE'));


TABLESPACE_NAME                SEGMENT_NAME                   SEGMENT_TYPE
------------------------------ ------------------------------ --------------
PARTITION_NAME
------------------------------
RECOMMENDATIONS
-----------------------------------------------------------------------------
C1
-----------------------------------------------------------------------------
TVMDS_ASSM                     ORDERS1                        TABLE PARTITION
ORDERS1_P2
Perform shrink, estimated savings is 57666422 bytes.
alter table "STEVE"."ORDERS1" modify partition "ORDERS1_P2" shrink space
 
TVMDS_ASSM                     ORDERS1                        TABLE PARTITION
ORDERS1_P1
Perform shrink, estimated savings is 45083514 bytes.
alter table "STEVE"."ORDERS1" modify partition "ORDERS1_P1" shrink space
 
TVMDS_ASSM_NEW                 ORDERS_NEW                     TABLE
 
Perform shrink, estimated savings is 155398992 bytes.
alter table "STEVE"."ORDERS_NEW" shrink space
 
TVMDS_ASSM_NEW                 ORDERS_NEW_INDEX               INDEX
 
Perform shrink, estimated savings is 102759445 bytes.
alter index "STEVE"."ORDERS_NEW_INDEX" shrink space


方法2:通過查詢DBA_ADVISOR_*視圖可以獲得結果。

在查詢DBA_ADVISOR_*視圖之前,可以通過查詢DBA_ADVISOR_TASKS.STATUS字段確保Segment Advisor工作已經結束。

select task_name, status from dba_advisor_tasks
   where owner = 'STEVE' and advisor_name = 'Segment Advisor';
 
TASK_NAME                      STATUS
------------------------------ -----------
Manual Employees               COMPLETED

以下的例子說明如何查詢DBA_ADVISOR_*視圖從所有運行的Segment Advisor中檢索通過STEVE用戶提交的工作:
select af.task_name, ao.attr2 segname, ao.attr3 partition, ao.type, af.message 
  from dba_advisor_findings af, dba_advisor_objects ao
  where ao.task_id = af.task_id
  and ao.object_id = af.object_id
  and ao.owner = 'STEVE';
TASK_NAME          SEGNAME      PARTITION       TYPE             MESSAGE
------------------ ------------ --------------- ---------------- --------------------------
Manual_Employees   EMPLOYEES                    TABLE            The free space in the obje
                                                                 ct is less than 10MB.
 
Manual_Salestable4 SALESTABLE4  SALESTABLE4_P1  TABLE PARTITION  Perform shrink, estimated
                                                                 savings is 74444154 bytes.
 
Manual_Salestable4 SALESTABLE4  SALESTABLE4_P2  TABLE PARTITION  The free space in the obje
                                                                 ct is less than 10MB.


三.在線段空間SHRINK

   段SHRINK是在線的,內部操作。在段SHRINK階段數據的移動不會影響DML操作和查詢操作。并行的DML操作在SHRINK操作結束,空間deallocated的時候會被短時間的阻塞。在SHRINK操作期間索引會被維護,操作完成后仍然是可用的。Segment SHRINK不要求額外的空間分配。


    Segment SHRINK高水位線以上和以下未使用的空間,相比較,空間deallocation只回收高水位線以上的空間。在回收操作中,默認情況下,數據庫壓緊段,調整高水位線,釋放浪費的空間。

    Segment Shrink要求行被移動到新的位置,因此必須在你想要shrink的獨享上首先啟用行遷移,和禁用在對象上基于rowid的觸發器定義。通過ALTER TABLE ... ENABLE ROW MOVEMENT語句啟用行遷移。

shrink只支持本地化表空間管理和ASMM管理的表空間下的表。

可以在表,IOT表,索引,分區,子分區,物化視圖,物化視圖日志上shrink空間。

如果表上有基于函數的索引,那么將無法對表進行shrink操作(CASCADE和NOCASCADE都不行)。


兩個shrink字句用于控制如何來shrink操作:

>COMPACT劃分SHRINK段操作到兩個階段,當你指定COMPACT,Oracle數據庫整理段空間碎片,壓緊表行,但是重新設置高水位線和deallocation空間會被延期。這個對長時間運行的查詢可能讀取被回收的塊來說是有用的。這個碎片整理和壓緊的結果會被保留到磁盤,之后可以再次以沒有COMPACT字句的命令執行SHRINK SPACE語句。

>CASCADE字句延伸段shrink操作到所有依賴段的對象,例如,當SHRINK表段的時候指定CASCADE,表相關的所有索引將被SHRINK(不需要在SHRINK分區表的分區的時候指定CASCADE),可以運行DBMS_SPACE.OBJECT_DEPENDENT_SEGMENTS存儲過程來查看依賴段的所有對象。

如果不指定COMPAT字句,執行段SHRINK之后的SQL語句都將因為失效的游標被重新的解析,因為這是個DDL操作。

例子:

>Shrink表和所有依賴它的段:(包括BASICFILE LOB段):
ALTER TABLE employees SHRINK SPACE CASCADE;

>只Shrink BASICFILE LOB段:
ALTER TABLE employees MODIFY LOB (perf_review) (SHRINK SPACE);

>Shrink分區表的單一分區:
ALTER TABLE customers MODIFY PARTITION cust_P1 SHRINK SPACE;

>Shrink IOT索引段和overflow段:
ALTER TABLE cities SHRINK SPACE CASCADE;

>只SHRINK IOT overflow段:
ALTER TABLE cities OVERFLOW SHRINK SPACE;

四.Deallocate未使用的空間

   當執行deallocate未使用的空間,數據庫使得數據庫段結尾之后未使用的空間變得可用(降低高水位線),注意,在對表做SHRINK之后高水位線默認會被降低,DEALLOCATE用于未執行SHRINK或者,非默認的SHRINK時使用。


執行deallocation之前,可以運行DBMS_SPACE.UNUSED_SPACE過程將返回高水位線位置信息,和段空間未使用空間的總數。對于本地化和段自動化管理的表空間,SPACE_USAGE可以獲得更準確的數據。

以下的語句deallocate段未使用的空間(表,索引或者cluster):
ALTER TABLE table DEALLOCATE UNUSED KEEP <integer>;
ALTER INDEX index DEALLOCATE UNUSED KEEP <integer>;
ALTER CLUSTER cluster DEALLOCATE UNUSED KEEP <integer>;

KEEP是可選的字句,指定段保留的空間總數,可以通過檢查DBA_FREE_SPACE視圖驗證DEALLOCATED為自由的空間。

相關文章:
   《Moving表到新的段或者表空間http://blog.itpub.net/23135684/viewspace-1766480/

--end--

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平昌县| 花垣县| 广河县| 南安市| 佳木斯市| 会东县| 秭归县| 山西省| 双江| 四会市| 城固县| 长泰县| 临泽县| 青冈县| 丰原市| 敖汉旗| 海丰县| 大足县| 凉山| 同江市| 大悟县| 龙里县| 大理市| 安平县| 侯马市| 中西区| 屏边| 六枝特区| 阿克苏市| 德安县| 稷山县| 板桥市| 西安市| 平果县| 安庆市| 大兴区| 鄂州市| 法库县| 自治县| 中西区| 抚松县|