Download Shrink Usage – Segment Management in Oracle 10g

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Database model wikipedia , lookup

Transcript
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