Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Oracle 10g Segment Space Management 1.0 August 2009 i|Page Contents 1 Overview ........................................................................................................................................ 3 1.1 Reclaiming Wasted Space: ..................................................................................................... 3 1.1.1 2 Using the Segment Advisor ......................................................................................................... 4 2.1 3 Viewing Segment Advisor Results with DBMS_SPACE.ASA_RECOMMENDATIONS ......... 4 Shrinking Database Segments Online ........................................................................................ 6 3.1 Invoking Online Segment Shrink ............................................................................................. 7 3.1.1 4 Understanding Reclaimable Unused Space ................................................................... 3 alter table ... shrink space VS. alter table ... move .......................................................... 8 Deallocating Unused Space ....................................................................................................... 10 2|Page 1 Overview 1.1 Reclaiming Wasted Space: This section explains how to reclaim wasted space, and also introduces the Segment Advisor, which is the Oracle Database component that identifies segments that have space available for reclamation. The following topics are covered: Understanding Reclaimable Unused Space Using the Segment Advisor Shrinking Database Segments Online De allocating Unused Space 1.1.1 Understanding Reclaimable Unused Space Over time, updates and deletes on objects within a tablespace can create pockets of empty space that individually are not large enough to be reused for new data. This type of empty space is referred to as fragmented free space. Objects with fragmented free space can result in much wasted space, and can impact database performance. The preferred way to defragment and reclaim this space is to perform an online segment shrink. This process consolidates fragmented free space below the high water mark and compacts the segment. After compaction, the high water mark is moved, resulting in new free space above the high water mark. That space above the high water mark is then deallocated. The segment remains available for queries and DML during most of the operation and no extra disk space need be allocated. You use the Segment Advisor to identify segments that would benefit from online segment shrink. Only segments in locally managed tablespaces with automatic segment space management (ASSM) are eligible. If a table with reclaimable space is not eligible for online segment shrink, or if you want to make changes to logical or physical attributes of the table while reclaiming space, you can use online table redefinition as an alternative to segment shrink. 3|Page 2 Using the Segment Advisor The Segment Advisor identifies segments that have space available for reclamation. It performs its analysis by examining usage and growth statistics in the Automatic Workload Repository (AWR), and by sampling the data in the segment. It is configured to run during maintenance windows as an automated maintenance task, and you can also run it on demand (manually). The Segment Advisor automated maintenance task is known as the Automatic Segment Advisor. The Segment Advisor generates the following types of advice: If the Segment Advisor determines that an object has a significant amount of free space, it recommends online segment shrink. If the object is a table that is not eligible for shrinking, as in the case of a table in a tablespace without automatic segment space management, the Segment Advisor recommends online table redefinition. If the Segment Advisor encounters a table with row chaining above a certain threshold, it records that fact that the table has an excess of chained rows. 2.1 Viewing Segment Advisor Results with DBMS_SPACE.ASA_RECOMMENDATIONS The ASA_RECOMMENDATIONS procedure in the DBMS_SPACE package returns a nested table object that contains findings or recommendations for Automatic Segment Advisor runs and, optionally, manual Segment Advisor runs. Calling this procedure may be easier than working with the DBA_ADVISOR_* views, because the procedure performs all the required joins for you and returns information in an easily consumable format. The following query returns recommendations by the most recent run of the Auto Segment Advisor, with the suggested command to run to follow the recommendations: 1) select tablespace_name, segment_name, segment_type, partition_name, recommendations, c1 from table(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE')); the result will be TABLESPACE_NAME SEGMENT_NAME SEGMENT_TYPE RECOMMENDATIONS S_INDEXES S_PARTY_M4 INDEX alter index "SIEBEL"."S_PARTY_M3" shrink space Perform shrink, estimated savings is 56951832 bytes. 4|Page 2) select TABLESPACE_NAME, SEGMENT_OWNER,SEGMENT_NAME,SEGMENT_TYPE, ALLOCATED_SPACE/1024/1024,USED_SPACE/1024/1024, RECLAIMABLE_SPACE/1024/1024 from table (dbms_space.asa_recommendations()) order by 7; This result will be in a more formatted way SEGMENT_NAME SEGMENT _TYPE S_ADDR_PER_M5 INDEX 536 274.701782 261.298218 S_CONTACT TABLE 4296 4009.18144 286.81856 S_FIELD TABLE 810 513.727115 296.272885 S_COLUMN TABLE 641 323.240175 317.759825 S_INT_FIELD TABLE 818 490.557779 327.442221 S_EVT_ACT TABLE 3016 2617.91393 398.086075 S_ORDPART_MVMT TABLE 1544 1113.89367 430.106331 S_EVT_MAIL TABLE 697 239.852514 457.147486 S_DOCK_INITM_01_U1 INDEX 1472 913.23774 558.76226 S_ORDER TABLE 3784 3200.67737 583.322627 S_ORG_EXT TABLE 6769 6177.15299 591.847014 5|Page ALLOCATED_SPAC E/1024/1024 USED_SPACE/1024/1024 RECLAIMABLE_SPAC E/1024/1024 3 Shrinking Database Segments Online When you delete large amount of data from a table, what do you do to reduce high water mark (HWM)? The answers may be: 1. exp/imp 2. Alter table ... move You use online segment shrink to reclaim fragmented free space below the high water mark in an Oracle Database segment. The benefits of segment shrink are these: Compaction of data leads to better cache utilization, which in turn leads to better online transaction processing (OLTP) performance. The compacted data requires fewer blocks to be scanned in full table scans, which in turns leads to better decision support system (DSS) performance. Segment shrink is an online, in-place operation. DML operations and queries can be issued during the data movement phase of segment shrink. Concurrent DML operations are blocked for a short time at the end of the shrink operation, when the space is deallocated. Indexes are maintained during the shrink operation and remain usable after the operation is complete. Segment shrink does not require extra disk space to be allocated. Segment shrink reclaims unused space both above and below the high water mark. In contrast, space deallocation reclaims unused space only above the high water mark. In shrink operations, by default, the database compacts the segment, adjusts the high water mark, and releases the reclaimed space. Segment shrink requires that rows be moved to new locations. Therefore, you must first enable row movement in the object you want to shrink and disable any rowid-based triggers defined on the object. You enable row movement in a table with the ALTER TABLE ... ENABLE ROW MOVEMENT command. Shrink operations can be performed only on segments in locally managed tablespaces with automatic segment space management (ASSM). Within an ASSM tablespace, all segment types are eligible for online segment shrink except these: IOT mapping tables Tables with rowid based materialized views Tables with function-based indexes SECUREFILE LOBs 6|Page 3.1 Invoking Online Segment Shrink Before invoking online segment shrink, view the findings and recommendations of the Segment Advisor. You invoke online segment shrink with Enterprise Manager (EM) or with SQL commands in SQL*Plus. You can shrink space in a table, index-organized table, index, partition, subpartition, materialized view, or materialized view log. You do this using ALTER TABLE, ALTER INDEX, ALTER MATERIALIZED VIEW, or ALTER MATERIALIZED VIEW LOG statement with the SHRINK SPACE clause. Two optional clauses let you control how the shrink operation proceeds: The COMPACT clause lets you divide the shrink segment operation into two phases. When you specify COMPACT, Oracle Database defragment the segment space and compacts the table rows but postpones the resetting of the high water mark and the deallocation of the space until a future time. This option is useful if you have longrunning queries that might span the operation and attempt to read from blocks that have been reclaimed. The defragmentation and compaction results are saved to disk, so the data movement does not have to be redone during the second phase. You can reissue the SHRINK SPACE clause without the COMPACT clause during off-peak hours to complete the second phase. The CASCADE clause extends the segment shrink operation to all dependent segments of the object. For example, if you specify CASCADE when shrinking a table segment, all indexes of the table will also be shrunk. (You need not specify CASCADE to shrink the partitions of a partitioned table.) Using the shrink command SQL> select owner,segment_name,bytes,blocks,extents from dba_segments where segment_name ='S_EVT_ACT'; OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS ------------------------------ --------------------------------------------------------------------------------- ---------SIEBEL S_EVT_ACT SQL> alter table SIEBEL.S_EVT_ACT shrink space; alter table SIEBEL.S_EVT_ACT shrink space * ERROR at line 1: 7|Page 3162505216 386048 146 ORA-10636: ROW MOVEMENT is not enabled Execution of the shrink command requires row movement. Thus, it is necessary to enable row movement in advance. SQL> alter table SIEBEL.S_EVT_ACT ENABLE ROW MOVEMENT; Table altered. SQL> alter table SIEBEL.S_EVT_ACT shrink space; Table altered. SQL> select owner,segment_name,bytes,blocks,extents from dba_segments where segment_name = 'S_EVT_ACT '; OWNER SEGMENT_NAME BYTES BLOCKS EXTENTS ------------------------------ --------------------------------------------------------------------------------- ---------SIEBEL S_EVT_ACT 3162505216 6048 20 This looks like alter table ... move command, but actually it is different in Oracle 10g. 3.1.1 alter table ... shrink space VS. alter table ... move Alter table SIEBEL.S_EVT_ACT move; SQL>select l.oracle_username,o.name objname,l.locked_mode from v$locked_object l,obj$ o where l.object_id=o.obj#; ORACLE_USERNAME OBJNAME LOCKED_MODE ------------------------- ------------------------------ ----------------------------------------------SYS S_EVT_ACT 6 SES2>select rownum from scott.emp where rownum=1 for update nowait; ORA-00054: Resource busy, NOWAIT is specified. SES1> alter table SIEBEL.S_EVT_ACT shrink space; SQL> select l.oracle_username,o.name objname,l.locked_mode from v$locked_object l,obj$ o where l.object_id=o.obj#; 8|Page ORACLE_USERNAME OBJNAME LOCKED_MODE ------------------------- ------------------------------ ------------------------------------------------------SYS S_EVT_ACT 3 SQL>select rownum from SIEBEL.S_EVT_ACT where rownum=1 for update nowait; ROWNUM ---------1 The difference between shrink command and move command is that the shrink command does not lock the object in exclusive mode. move command is executed with LOCKED_MODE=6 (exclusive mode). shrink command, on the other hand, is executed with LOCKED_MODE=3 (row lock mode), which enables recovering without stopping operations. Segment is shrunk even though the command is stopped in the middle of the execution. 9|Page 4 Deallocating Unused Space When you deallocate unused space, the database frees the unused space at the unused (high water mark) end of the database segment and makes the space available for other segments in the tablespace. The following statements deallocate unused space in a segment (table, index or cluster): ALTER TABLE table DEALLOCATE UNUSED KEEP integer; ALTER INDEX index DEALLOCATE UNUSED KEEP integer; The KEEP clause is optional and lets you specify the amount of space retained in the segment. 10 | P a g e