CS194-3/CS16x Introduction to Systems Lecture 16 File Caching, DBMS Indexing October 22, 2007 Prof....

27
CS194-3/CS16x Introduction to Systems Lecture 16 File Caching, DBMS Indexing October 22, 2007 Prof. Anthony D. Joseph http://www.cs.berkeley.edu/~adj/cs16x
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    219
  • download

    0

Transcript of CS194-3/CS16x Introduction to Systems Lecture 16 File Caching, DBMS Indexing October 22, 2007 Prof....

CS194-3/CS16xIntroduction to Systems

Lecture 16

File Caching, DBMS Indexing

October 22, 2007

Prof. Anthony D. Joseph

http://www.cs.berkeley.edu/~adj/cs16x

Lec 16.210/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Review: DBMS Indexes

• Abstraction of stored data is “files” of “records”– Records live on pages, Record ID (RID) = <page#, slot#>

• Sometimes, we want to retrieve records by specifying the values in one or more fields, e.g.,– Find all students in the “CS” department– Find all students with a gpa > 3

• File index: disk-based data structure that speeds up selections on the search key fields for the index– Any subset of the fields of a relation can be the search

key for an index on the relation.– Search key is not the same as key (e.g. doesn’t have to

be unique ID)

• An index contains a collection of data entries, and supports efficient retrieval of all records with a given search key value k

Lec 16.310/22/07 Joseph CS194-3/16x ©UCB Fall 2007

• Data stripped across multiple disks – Successive blocks

stored on successive (non-parity) disks

– Increased bandwidthover single disk

• Parity block (in green) constructed by XORing data bocks in stripe– P0=D0D1D2D3– Can destroy any one

disk and still reconstruct data

– Suppose D3 fails, then can reconstruct:D3=D0D1D2P0

• Later in term: talk about spreading information widely across internet for durability.

Review: RAID 5+: High I/O Rate Parity

IncreasingLogicalDisk Addresses

StripeUnit

D0 D1 D2 D3 P0

D4 D5 D6 P1 D7

D8 D9 P2 D10 D11

D12 P3 D13 D14 D15

P4 D16 D17 D18 D19

D20 D21 D22 D23 P5

Disk 1 Disk 2 Disk 3 Disk 4 Disk 5

Lec 16.410/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Goals for Today

• File Caching• Indexing in a DBMS

Note: Some slides and/or pictures in the following areadapted from slides ©2005 Silberschatz, Galvin, and Gagne. Slides courtesy of Kubiatowicz, AJ Shankar, George Necula, Alex Aiken, Eric Brewer, Ras Bodik, Ion Stoica, Doug Tygar, and David Wagner.

Lec 16.510/22/07 Joseph CS194-3/16x ©UCB Fall 2007

File System Caching• Key Idea: Exploit locality by caching data in memory

– Name translations: Mapping from pathsinodes– Disk blocks: Mapping from block addressdisk content

• Buffer Cache: Memory used to cache kernel resources, including disk blocks and name translations– Can contain “dirty” blocks (blocks yet on disk)

• Replacement policy? LRU– Can afford overhead of timestamps for each disk block– Advantages:

» Works very well for name translation» Works well in general as long as memory is big enough to

accommodate a host’s working set of files.– Disadvantages:

» Fails when some application scans through file system, thereby flushing the cache with data used only once

» Example: find . –exec grep foo {} \;• Other Replacement Policies?

– Some systems allow applications to request other policies

– Eg, ‘Use Once’: FS can discard blocks after they’re used

Lec 16.610/22/07 Joseph CS194-3/16x ©UCB Fall 2007

File System Caching (con’t)

• Cache Size: How much memory should the OS allocate to the buffer cache vs virtual memory?– Too much memory to the file system cache won’t be

able to run many applications at once– Too little memory to file system cache many

applications may run slowly (disk caching not effective)

– Solution: adjust boundary dynamically so that the disk access rates for paging and file access are balanced

• Read Ahead Prefetching: fetch sequential blocks early– Key Idea: exploit fact that most common file access is

sequential by prefetching subsequent disk blocks ahead of current read request (if they are not already in memory)

– Elevator algorithm can efficiently interleave groups of prefetches from concurrent applications

– How much to prefetch?» Too many imposes delays on requests by other

applications» Too few causes many seeks (and rotational delays)

among concurrent file requests

Lec 16.710/22/07 Joseph CS194-3/16x ©UCB Fall 2007

File System Caching (con’t)• Delayed Writes: Writes to files not immediately

sent out to disk– Instead, write() copies data from user space buffer

to kernel buffer (in cache)» Enabled by presence of buffer cache: can leave written

file blocks in cache for a while» If some other application tries to read data before

written to disk, file system will read from cache – Flushed to disk periodically (e.g. in UNIX, every 30

sec)– Advantages:

» Disk scheduler can efficiently order lots of requests» Disk allocation algorithm can be run with correct size

value for a file» Some files need never get written to disk! (e..g

temporary scratch files written /tmp often don’t exist for 30 sec)

– Disadvantages» What if system crashes before file has been written

out?» Worse yet, what if system crashes before a directory

file has been written out? (lose pointer to inode!)

Lec 16.810/22/07 Joseph CS194-3/16x ©UCB Fall 2007

DBMS Index Breakdown

• What selections does the index support• Representation of data entries in index

– i.e., what kind of info is the index actually storing?

– 3 alternatives here

• Tree-based, hash-based, other

Lec 16.910/22/07 Joseph CS194-3/16x ©UCB Fall 2007

First Question to Ask About Indexes

•What kinds of selections do they support?– Selections of form field <op> constant– Equality selections (op is =)– Range selections (op is one of <, >, <=, >=,

BETWEEN)– More exotic selections:

» 2-dimensional ranges (“east of Berkeley and west of Truckee and North of Fresno and South of Eureka”)•Or n-dimensional

» 2-dimensional distances (“within 2 miles of Soda Hall”)•Or n-dimensional

» Ranking queries (“10 restaurants closest to Berkeley”)» Regular expression matches, genome string matches, etc.» One common n-dimensional index: R-tree

•Supported in Oracle and Informix DBMSs

Lec 16.1010/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Alternatives for Data Entry k* in Index

• Three alternatives: Actual data record (with key value k) <k, rid of matching data record> <k, list of rids of matching data records>

• Choice is orthogonal to the indexing technique– Examples of indexing techniques: B+ trees,

hash-based structures, R trees, …– Typically, index contains auxiliary information

that directs searches to the desired data entries

• Can have multiple (different) indexes per file.– E.g., file sorted by age, with a hash index on

salary and a B+tree index on name

Lec 16.1110/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Administrivia

• Visit my office hours– M 2-3, Tu 1-2, and by appt

• Plan Ahead: this month will be difficult!!– Project or exam deadlines every week

Lec 16.1210/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Alternatives for Data Entries (Contd.)

Alternative 1: Actual data record (with key value k)

• If this is used, index structure is a file organization for data records (like Heap files or sorted files)

• At most one index on a given collection of data records can use Alternative 1

• This alternative saves pointer lookups but can be expensive to maintain with insertions and deletions

Lec 16.1310/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Alternatives for Data Entries (Contd.)

Alternative 2

<k, rid of matching data record>

and Alternative 3

<k, list of rids of matching data records>

• Easier to maintain than Alt 1 • If more than one index is required on a given

file, at most one index can use Alternative 1; rest must use Alternatives 2 or 3

• Alternative 3 more compact than Alternative 2, but leads to variable sized data entries even if search keys are of fixed length

• Even worse, for large rid lists the data entry would have to span multiple blocks!

Lec 16.1410/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Tree-Structured Indexes: Introduction

• Selections of form field <op> constant– Equality selections (op is =)– Range selections (op is one of <, >, <=, >=,

BETWEEN)

• Tree-structured indexing techniques support both range selections and equality selections

• B+ tree: dynamic, adjusts gracefully under inserts and deletes

Lec 16.1510/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Range Searches

• “ Find all students with gpa > 3.0 ”– If data is in sorted file, do binary search to find

first such student, then scan to find others– Cost of binary search in a database can be quite

high Q: Why???

• Simple idea: Create an ‘index’ file

Can do binary search on (smaller) index file!

Page 1 Page 2 Page NPage 3 Data File

k2 kNk1 Index File

Lec 16.1610/22/07 Joseph CS194-3/16x ©UCB Fall 2007

• Insert/delete at log F N cost; keep tree height-balanced – F = fanout, N = # leaf pages

• Minimum 50% occupancy (except for root)– Each node contains m entries where d <= m <= 2d entries– “d” is called the order of the tree

• Supports equality and range-searches efficiently• All searches go from root to leaves, and

structure is dynamic

B+ Tree: The Most Widely Used Index

Index Entries

Data Entries("Sequence set")

(Direct search)

Lec 16.1710/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Example B+ Tree

• Search begins at root, and key comparisons direct it to a leaf

• Search for 5*, 15*, all data entries >= 24* ...

Based on the search for 15*, we know it is not in the tree!

Root

17 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

13

Lec 16.1810/22/07 Joseph CS194-3/16x ©UCB Fall 2007

B+ Trees in Practice

• Typical order: 100• Typical fill-factor: 67%

– average fanout = 133

• Typical capacities:– Height 2: 1333 = 2,352,637 entries– Height 3: 1334 = 312,900,700 entries

•Can often hold top levels in buffer pool:– Level 1 = 1 page = 8 KBytes– Level 2 = 133 pages = 1 MByte– Level 3 = 17,689 pages = 133 MBytes

Lec 16.1910/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Inserting a Data Entry into a B+ Tree

• Find correct leaf L• Put data entry onto L

– If L has enough space, done !– Else, must split L (into L and a new node L2)

» Redistribute entries evenly, copy up middle key» Insert index entry pointing to L2 into parent of L

• This can happen recursively– To split index node, redistribute entries evenly, but

push up middle key (Contrast with leaf splits.)

• Splits “grow” tree; root split increases height – Tree growth: gets wider or one level taller at top

Lec 16.2010/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Example B+ Tree - Inserting 8*

• Notice that root was split, leading to increase in height• In this example, we can avoid split by re-distributing entries; however, this is usually not done in practice

Root

17 24 30

2* 3* 5* 7* 14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

13

2* 3*

Root

17

24 30

14* 16* 19* 20* 22* 24* 27* 29* 33* 34* 38* 39*

135

7*5* 8*

BREAK

Lec 16.2210/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Deleting a Data Entry from a B+ Tree

• Start at root, find leaf L where entry belongs

• Remove the entry– If L is at least half-full, done!

– If L has only d-1 entries,

» Try to re-distribute, borrowing from sibling (adjacent node with same parent as L)

» If re-distribution fails, merge L and sibling

• If merge occurred, must delete entry (pointing to L or sibling) from parent of L

• Merge could propagate to root, decreasing height• Many systems don’t worry about ensuring half-full pages

– Just let page slowly go empty; if it’s truly empty, easy to delete from tree

Lec 16.2310/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Bulk Loading of a B+ Tree

• If we have a large collection of records, and we want to create a B+ tree on some field, doing so by repeatedly inserting records is very slow– Also leads to minimal leaf utilization – why?

• Bulk Loading can be done much more efficiently

• Initialization: Sort all data entries, insert pointer to first (leaf) page in a new (root) page

3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

Sorted pages of data entries; not yet in B+ treeRoot

Lec 16.2410/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Bulk Loading (Contd.)

• Index entries for leaf pages always entered into right-most index page just above leaf level– When this fills

up, it splits. (Split may go up right-most path to the root.)

• Much faster than repeated inserts, especially when one considers locking!

3* 4* 6* 9* 10*11* 12*13* 20*22* 23* 31* 35*36* 38*41* 44*

Root

Data entry pages

not yet in B+ tree3523126

10 20

3* 4* 6* 9* 10* 11* 12*13* 20*22* 23* 31* 35*36* 38*41* 44*

6

Root

10

12 23

20

35

38

not yet in B+ treeData entry pages

Lec 16.2510/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Summary of Bulk Loading

• Option 1: multiple inserts– Slow– Does not give sequential storage of leaves

• Option 2: Bulk Loading – Has advantages for concurrency control– Fewer I/Os during build– Leaves will be stored sequentially (and

linked, of course)– Can control “fill factor” on pages

Lec 16.2610/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Summary

• Data entries in index can be actual data records, <key, rid> pairs, or <key, rid-list> pairs– Choice orthogonal to indexing structure (i.e., tree,

hash,...)

• If selection queries are frequent, sorting the file or building an index is important– Sorted files and tree-based indexes best for range

search; also good for equality search– Files rarely kept sorted in practice; B+ tree index is

better

• Index is a collection of data entries plus a way to quickly find entries with given key values– Usually have several indexes on a given file of

data records, each with a different search key– One of the most optimized components of a DBMS

Lec 16.2710/22/07 Joseph CS194-3/16x ©UCB Fall 2007

Summary (cont’d)

• Tree-structured indexes are ideal for range-searches, also good for equality searches

• B+ tree is a dynamic structure.

– Most widely used index in DBMSs because of its versatility

– Inserts/deletes leave tree height-balanced; log F N

cost.

– High fanout (F) means depth rarely more than 3 or 4

– Almost always better than maintaining a sorted file

– Typically, 67% occupancy on average.

• Bulk loading can be much faster than repeated inserts for creating a B+ tree on a large data set