Indexes: Structure, Splits and Free Space Management Internals

29
2014 © Trivadis BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA 2014 © Trivadis Indexes: Structure, Splits and Free Space Management Internals OakTable World, 29 September 2014 Christian Antognini 29 September 2014 Indexes: Structure, Splits and Free Space Management Internals 1

description

 

Transcript of Indexes: Structure, Splits and Free Space Management Internals

Page 1: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals

OakTable World, 29 September 2014

Christian Antognini

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

1

Page 2: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals29 September 2014

2

@ChrisAntognini

Senior principal consultant, trainer and partnerat Trivadis in Zurich (CH) [email protected] http://antognini.ch

Focus: get the most out of Oracle Database Logical and physical database design Query optimizer Application performance management

Author of Troubleshooting Oracle Performance Apress, 2008/2014

OakTable Network, Oracle ACE Director

Page 3: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

AGENDA

1. Concepts

2. Index Keys

3. Splits

4. Free Space

5. Reorganizations

6. Bitmap

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

3

Page 4: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Concepts

4

Page 5: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals5

Structure of a B-Tree

29 September 2014

24 51

12 29 42 86

2 ROWID

8 ROWID

10 ROWID

11 ROWID

12 ROWID

18 ROWID

20 ROWID

24 ROWID

26 ROWID

29 ROWID

34 ROWID

38 ROWID

42 ROWID 51 ROWID

55 ROWID

73 ROWID

86 ROWID

99 ROWID

left<24right≥24

leaf

blo

cks

bra

nch

blo

cks

root block

Page 6: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals6

Nulls

NULL values are stored in the index only when at least one of the indexed columns is not NULL Exception: bitmap indexes always store indexed data

For unique indexes the uniqueness is guaranteed only if at least one of the indexed columns is not NULL

NULL values are stored after not NULL values in the index

29 September 2014

Page 7: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals7

Myths

Oracle B-tree indexes can become “unbalanced” over time and need to be rebuilt

Deleted space in an index is “deadwood” and over time requires the index to be rebuilt

If an index reaches “x” number of levels, it becomes inefficient and requires the index to be rebuilt

If an index has a poor clustering factor, the index needs to be rebuilt

To improve performance, indexes need to be regularly rebuilt

29 September 2014

Source: Oracle B-Tree Index Internals: Rebuilding The Truth, Richard Foote

Page 8: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Index Keys

8

Page 9: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals9

Internal Key

Internally a unique key is needed to sort the indexed columns

For unique indexes the internal key is the same as the index key

For non-unique indexes the ROWID of the indexed row is added to the index key to make it unique For global indexes an extended ROWID is used, otherwise a restricted

ROWID is enough

Therefore The index entries are sorted in a consistent way Even for non-unique indexed the order of the index entries changes only

when the indexed table is reorganized (i.e. not if the index is rebuilt!)

29 September 2014

Page 10: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals10

Branch Block Key

In branch blocks the internal key is truncated after the first byte that differs from the last key of the left leaf block

All keys are preceded by a length field 1 byte for data up to 127 bytes Otherwise 2 bytes

- The high bit of the first byte is set (0x80)- The remaining bits of the first byte and the second byte contain the length

Partially stored keys are terminated by 0xFE Nulls have a column length of 0xFF, trailing nulls are stored

29 September 2014

RDBALen

Key 1DataKey 1

LenKey X

DataKey X

Page 11: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals11

Leaf Block Key

All keys are preceded by a length field 1 byte for data up to 127 bytes Otherwise 2 bytes

- The high bit of the first byte is set (0x80)- The remaining bits of the first byte and the second byte contain the length

Nulls have a column length of 0xFF, trailing nulls are stored

For global indexes an extended ROWID is used, otherwise a restricted ROWID is enough

29 September 2014

Flag LockLen

Key 1DataKey 1

LenROWID

ROWID(optional)

Page 12: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Splits

12

Page 13: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals13

Splits

Two split methods are implemented

50:50 split The keys are evenly distributed over two blocks Based on size, not number of keys

99:1 split (a.k.a. 90:10) The new key is the right-most of the index A new leaf block containing only the new key is added Useful for increasing values like sequences and timestamps

A change in the structure of an index (like a split) is not rollbacked if the transaction that caused it is rollbacked

29 September 2014

Page 14: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals14

Splits

29 September 2014

#1

Page 15: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals15

Splits

29 September 2014

#1

#2 #3

Page 16: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals16

Splits

29 September 2014

#3#2 #4

#1

#3#2 #4

#1

Page 17: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals17

Splits

29 September 2014

#1

#3#2 #4 #5

#1

#3#2 #4 #5

Page 18: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals18

Splits

29 September 2014

Page 19: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Free Space

19

Page 20: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals20

Reminder

PCTFREE is only used when the index is created (or rebuilt) An update is implemented as a delete followed by an insert The free space in leaf blocks is strongly dependent on the type of split (50:50

or 99:1)

PCTUSED cannot be used for indexes

29 September 2014

Page 21: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals21

Free Space

29 September 2014

#1

#4#2 #3

Page 22: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals22

Free Space

29 September 2014

#1

#3#2 #4

Page 23: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Reorganizations

23

Page 24: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals24

Reorganizations

If the free space is not automatically reused, it should be manually reclaimed This is unusual, therefore such an operation should only be performed if it is

really necessary

To manually reclaim free space two possibilities exists Rebuild: the index is recreated Coalesce: free space in contiguous blocks is merged and, therefore, some

blocks are unchained

Unnecessary rebuild/coalesce may lead to sub-optimal data density in leaf blocks Too much free space, i.e. too low density Too much block splits, i.e. too high density

29 September 2014

Page 25: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals25

Rebuild vs. Coalesce

29 September 2014

Pro Cons

Rebuild

Doesn’t lock table (online rebuilds only)

Reclaim all the free space

Locks table during rebuild (offline rebuilds only)

Doubles space usage temporarily

The index is completely recreated (to do so large sorts may be performed)

Coalesce

Doesn’t lock table

Current index structure is reused

Doesn’t reclaim all the free space

Can generate lot of redo

Page 26: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

Bitmap

26

Page 27: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Indexes: Structure, Splits and Free Space Management Internals27

Bitmap

A bitmap index is a regular B-tree, only the internal key differs from the non-bitmap index!

The key is composed by Indexed column(s) Start/End ROWID Bitmap representing the rows that have the key

- To save space it is “compressed”

29 September 2014

Page 28: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Text Text

Summary

B-tree indexes cannot become “unbalanced”

Deleted space in an index can be reused

Indexes do not need to be regularly rebuilt

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

28

Page 29: Indexes: Structure, Splits and Free Space Management Internals

2014 © Trivadis

Questions and answers ...

2014 © Trivadis

BASEL BERN BRUGG LAUSANNE ZUERICH DUESSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MUNICH STUTTGART VIENNA

Christian Antognini

Senior Principal Consultant

[email protected]

29 September 2014Indexes: Structure, Splits and Free Space Management Internals

29