IT 21003 Database Administration

Download Report

Transcript IT 21003 Database Administration

IT 21003 Database Administration
Section 05
Rollback Segments: An Introduction

What are they?
Space within a database used to store “before”
images
 Made up of extents and blocks (similar to data
segments)
 Consist of rollback entries

 A rollback
entry has the necessary information to undo
the changes made by one transaction
Rollback Segments: An Introduction

What are they used for?

Rollback of transactions
 Read Consistency
 Recovery
Rollback Segments: Structure
Rollback segments contain rollback entries,
which consist of


Transaction ID of the transaction, which makes
the change to the database
 Block information about the affected blocks
 The “before” image – an inverse of the transaction
Rollback Segments: Structure
Consist of extents and treated as a “ring of
extents” for cyclic reuse

Extents may be freed up for “normal” use when
the rollback segment is

Dropped
Shrunk to its normal size

Each rollback segment requires a least two
extents
Rollback Segments: Structure
The rollback entries require protection using
the redo logs


They are stored within the database
 Needed for rollback when recovering from media
failure
Rollback Segments: Usage

When are rollback segments required?

Deadlock or statement execution error
 Rollback to a savepoint
 Rollback of a transaction due to user request
 Rollback of a transaction due to abnormal process
termination
 Rollback of uncommitted transactions on instance
failure
 Read-consistent snapshots – need old versions of
data and index
Rollback Segments: Usage

How big should they be?

Rollback segment sizing suffers a fundamental
tension
Short transactions – small rollback segments
 Long transactions – large rollback segments

Rollback Segments: Requirements

How many?

The SYSTEM tablespace requires its own special
rollback segment
 At least one additional rollback segment is
required for databases using more then one
tablespace
 The quantity depends entirely on the transaction
traffic
Rollback Segments: Requirements
Oracles recommended number of rollback
segments:

Number of concurrent transactions Recommended rollback segments
Fewer than 16
4
Between 16 and 31
7
Greater than 31
5 but never more than 50
Rollback Segments: Public and Private

PUBLIC rollback segments

Used by any instance accessing a database in
parallel server mode
 Declared as public in
Create Public Rollback Segment
Once “claimed” by an instance, cannot be used by
other instances

Rollback Segments: Public and Private

PRIVATE rollback segments

Limited for use by only one instance accessing the
database
 Explicitly listed in the parameter file and picked up
by the instance on startup
 Lie dormant if no instance specifies them in the
parameter file
Rollback Segments: Public and Private

The rollback_segments parameter

Example:
rollback_segments = rbs_1, rbs_2

Default value is NULL, causing the instance to use
only the SYSTEM rollback segment plus any
available public rollback segments
Rollback Segments: Usage

How are rollback segments acquired?

On startup, the instance consults the list of private
rollback segments in the parameter file and
acquires all those specified
 If the number acquired does not satisfy the ratio:
Transactions/Transactions_Per_Rollback_Segment
65/20 then Oracle attempts to acquire 4 rollback
segments
it attempts to acquire any PUBLIC rollback
segments within the database until the ratio is
reached
If the ratio is not satisfied, the segments are used
“as-is”
Rollback Segments: Creating Rollback Segments

Create [Public] Rollback Segment rs_name

[Tablespace tablespacename]
 [Storage ( [Initial n] [Next n] [Minextents n]
 [Maxextents n] [Optimal n] ) ];
Rollback Segments: Creating Rollback Segments
It is recommended to set INITIAL equal to
NEXT in order to make all extents the same
size


Size of extents should be

Small enough to minimize page faulting in the buffer
cache
 Large enough to minimize excessive recursive SQL due
to dynamic allocation of space and to support read
consistency
 After
creation, rollback segments must be
altered to be brought online for use
 Alter
Rollback Segment rs_name Online;
Rollback Segments: Guidelines
Must have a minimum of two extents
(preferably more) on creation


Set MINEXTENTS to a value between 8 and 20
 MAXEXTENTS should be “high” to cater to large
normal transactions
Initial default value for MAXEXTENTS depends on the
value of DB_BLOCK_SIZE

Transactions use rollback segments on an extentby-extent basis, so the value of INITIAL should be
equal to NEXT
Rollback Segments: Guidelines
Use PRIVATE rollback segments when
possible


PUBLIC rollback segments are mainly used in
parallel server mode
 Make a list of them in the parameter file

Cannot set a value for PCTINCREASE

It is set by Oracle to Zero
Rollback Segments: Guidelines

Make all rollback segments the same size

Rollback segments allocated to transactions on a
round-robin basis (Cyclic Reuse)
 Could define on large rollback segment and
manually direct large transactions to it

Include the following statement at the start of the
transaction:
 Set Transaction Use Rollback Segment rs_name;
Rollback Segments: Guidelines

Size of rollback segment – a rule of thumb

On average, each rollback segment should be
about 10 percent of the size of the largest table
 So:

Total size of rollback segment = T
 Number of Initial extents specified = n
 Then size of each extent(s) = T/n
Rollback Segments: Positioning
Rollback segments are critical for normal
running of a database


Loss of rollback segment(s) can interrupt
database availability
Rollback segments may be stored in any
tablespace


SYSTEM rollback segment must be in the
SYSTEM tablespace
Could store all rollback segments in the
SYSTEM tablespace

Rollback Segments: Positioning

Store a rollback segment in each tablespace

Balances I/O but makes every disk critical and is
not recommended
 Tablespaces with active rollback segments cannot
be taken offline
Store all rollback segments on a disk of their
own this is the recommended way


Create a tablespace for rollback segments
 Makes it easier to take tablespaces offline
Rollback Segments: OPTIMAL Clause
Your chance to specify an optimum working
size for a rollback segment


OPTIMAL is the amount of residual space to
which rollback segments will truncate when inactive
extents are discovered by transactions
Small values of OPTIMAL help to keep
rollback segments small enough to fit in
memory


Suitable for systems with high frequency of short
transactions
 Do not set OPTIMAL such that the rollback
segments shrinks to below 8 to 20 extents
Rollback Segments: OPTIMAL Clause
Large values reduce the number of shrink and
extend operations (Dynamic Space Allocation)


Suitable for large transactions or long-running
queries
v$rollstat – provides information about rollback
segments

Rollback Segments: v$rollstat table
Select *
 From v$rollstat;


Contains information about:

Current size and average active size of rollback
segment
 Number of shrink and extend operations
 Largest size to which the rollback segment has
extended (represented by HWMSIZE known as the high
watermark
Rollback Segments: OPTIMAL Clause

Setting Guidelines for OPTIMAL
Shrinks Avg Size
Shrunk
High
High
Periodic long transactions could cause this, set
OPTIMAL higher until shrinks are low
High
Low
OPTIMAL is too small (too many shrinks)
Low
Low
If average active size = OPTIMAL then OPTIMAL is
Ok else OPTIMAL is too large (not many shrinks
being performed)
Low
High
OPTIMAL is set correctly – Do Nothing
Rollback Segments: Setting OPTIMAL
Rollback segments can also be manually
shrunk

 Alter
Rollback Segment rs_name Shrink To 2M;
Do not set a value for OPTIMAL for the
SYSTEM rollback segment

Rollback Segments: How Transactions Use them
On initiation a transaction is allocated a
rollback segment on a round-robin (cyclic
reuse) basis


Once a rollback segment is allocated, the
transaction can use no other
 The transaction places its ID in a transaction table
held in the header block of the rollback segment

Usual to have a number of rollback segments to
prevent transactions from queuing and waiting for others
to insert their IDs
Rollback Segments: How Transactions Use them
Each rollback segment has cyclically reusable
extents and a head and tail pointer

The “Head” is the position at which the new
rollback information is to be written
 The “Tail” is the position of the oldest active data
written by an uncommitted transaction (cannot yet
be overwritten)


The Head cannot proceed past the Tail
Rollback Segments: How Transactions Use them
 A transaction
writes rollback data into the
rollback segment on an extent-by-extent basis

Starts writing into the current extent
This is the extent containing the “Head” pointer
When the extent fills – the head moves on to the
next extent


If the next extent is not yet free (contains the tail), a
new extent is allocated
Extents can be shared by transactions, but not
blocks within the extents
 Inactive extents contain no active rollback
entries from transactions

Rollback Segments: Removal of Extents
 A rollback
segment may shrink only when an
extent fills and the Head is able to move into the
next extent
 At
this point, further “Next” extents are
investigated and if they are also inactive, they are
deallocated from the rollback segment until the
OPTIMAL size is reached
 In this way server processes looking for free
extents deallocate the oldest inactive extents first
 This means it could be some time before the
rollback segment actually shrinks
Rollback Segments: Processing
Rollback Segment Phase 1
Extent 1
Transaction
1
Transaction
2
Extent 4
Extent 2
Extent 3
Active Extent without space
Active Extent with space
Rollback Segments: Processing
Rollback Segment Phase 2
Extent 1
Transaction
1
Transaction
2
Extent 4
Extent 2
Extent 3
Active Extent without space
Active Extent with space
Rollback Segments: Processing
Rollback Segment Phase 3, Option 1
Available Extents
Extent 2
Transaction
3
Transaction
4
Extent 1
Extent 3
Extent 1 has become inactive
Extent 4
Active Extent without space
Active Extent with space
Rollback Segments: Processing
Rollback Segment Phase 3, Option 2
Extent 1 remains active
No Available Extents
Extent 1
Transaction
3
Extent 5
Extent 2
Transaction
4
Extent 4
Active Extent without space
Active Extent with space
Extent 3
Rollback Segments: Dropping

Statement

Drop [Public] Rollback Segment rs_name;
 Performed when the rollback segment extents
have caused free-space fragmentation, or when it
needs to be relocated
 All storage is returned to free space
 The rollback segment must be Offline
 Remember to remove its name from the
parameter file
Rollback Segments: Manipulation
To set a rollback segment offline (unavailable
for transactions)

 Alter
[Public] Rollback Segment rs_name Offline;
 The segment will not actually go offline until all its
active transactions have completed
The SYSTEM rollback segment cannot be
taken offline
 Manipulation is similar to tables

Rollback Segments: “Snapshot Too Old” Error
This error normally occurs when a longrunning query needs to access rollback
information to obtain a consistent view of the
data


Oracle always presents queries with a consistent
set of data from a combination of data in the
database tables and rollback segments
 Transactions are given priority in the use of
rollback segments
 A transaction
can overwrite data in inactive extents
even if that information may be needed to construct a
read-consistent view for queries
Rollback Segments: “Snapshot Too Old” Error
This is the reason for maintaining a
reasonable number of extents in a rollback
segment

 Avoids
a rollback segment wrapping around too
quickly on the extents

When the “Before Image” doesn’t exists
Questions?