Sorting 1 Motivation Sells( bar, Joe’s Joe’s Sue’s Sue’s beer, Bud Miller Bud Coors price ) 2.50 2.75 2.50 3.00 Bars( bar, addr ) Joe’s Maple St. Sue’s River Rd. Query: Find all locations that sell beer for less than 2.75. Select Bars.addr From Sells, Bars Where (Sells.bar = Bars.bar) and (Sells.price < 2.75) 2 Motivation A straightforward join is nested loop Another possible join is to sort then merge the tables PROJECTBars.addr SELECTSells.price < 2.75 JOIN Sells.bar = Bars.bar Which one is faster? Need a cost model Sells Bars 3 Illustrating the Two Different Join Algs 147382 (4,4), (3,3), (2,2) 26934 123478 23469 4 The I/O Model of Computation • In main memory algorithms – we care about CPU time • In databases time is dominated by I/O cost • Assumption: cost is given only by I/O • Consequence: – need to redesign certain algorithms – compute cost using I/O read/writes • Will illustrate here with sorting 5 Sorting • Illustrates the difference in algorithm design when your data is not in main memory: – Problem: sort 1Gb of data with 1Mb of RAM. • Arises in many places in database systems: – – – – – Data requested in sorted order (ORDER BY) Needed for grouping operations First step in sort-merge join algorithm Duplicate removal Bulk loading of B+-tree indexes. 6 2-Way Merge-sort: Requires 3 Buffers • Pass 1: Read a page, sort it, write it. – only one buffer page is used • Pass 2, 3, …, etc.: – three buffer pages used. INPUT 1 OUTPUT INPUT 2 Disk Main memory buffers Disk 7 Two-Way External Merge Sort • Each pass we read + write each page in file. • N pages in the file => the number of passes log 2 N 1 6,2 9,4 8,7 5,6 3,1 2 3,4 2,6 4,9 7,8 5,6 1,3 2 4,7 8,9 2,3 4,6 1,3 5,6 Input file PASS 0 1-page runs PASS 1 2 2-page runs PASS 2 2,3 • So total cost is: 3,4 2 N log 2 N 1 • Improvement: start with larger runs • Sort 1GB with 1MB memory in 10 passes 4,4 6,7 8,9 1,2 3,5 6 4-page runs PASS 3 1,2 2,3 3,4 8-page runs 4,5 6,6 7,8 9 8 3 4 6 2 9 4 8 7 5 6 3 1 2 Input file PASS 0 3 44 2 6 4 9 7 8 5 6 1 3 2 1-page runs PASS 1 2-page runs PASS 2 Two-Way External Merge Sort 9 2 3 4 7 1 3 4 6 8 9 5 6 2-page runs 2 PASS 2 2 3 4 4 1 2 6 7 3 5 8 9 6 4-page runs PASS 3 8-page runs 10 Can We Do Better ? • We have more main memory • Should use it to improve performance 11 Cost Model for Our Analysis • • • • B: Block size M: Size of main memory N: Number of records in the file R: Size of one record 12 External Merge-Sort • Phase one: load M bytes in memory, sort – Result: runs of length M/R records ... Disk M/R records M bytes of main memory ... Disk 13 Phase Two • Merge M/B – 1 runs into a new run • Result: runs have now M/R (M/B – 1) records Input 1 ... Input 2 .... Output ... Input M/B Disk M bytes of main memory Disk 14 Phase Three • Merge M/B – 1 runs into a new run • Result: runs have now M/R (M/B – 1)2 records Input 1 ... Input 2 .... Output ... Input M/B Disk M bytes of main memory Disk 15 Cost of External Merge Sort • Number of passes: • Think differently 1 log M / B 1 NR / M – Given B = 4KB, M = 64MB, R = 0.1KB – Pass 1: runs of length M/R = 640000 • Have now sorted runs of 640000 records – Pass 2: runs increase by a factor of M/B – 1 = 16000 • Have now sorted runs of 10,240,000,000 = 1010 records – Pass 3: runs increase by a factor of M/B – 1 = 16000 • Have now sorted runs of 1014 records • Nobody has so much data ! • Can sort everything in 2 or 3 passes ! 16 Extra Materials on Sorting Read only after we have covered B+ tree, and only if you want to know more about sorting Chapter 13 Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 17 Why Sort? A classic problem in computer science! Data requested in sorted order e.g., find students in increasing gpa order Sorting is first step in bulk loading B+ tree index. Sorting useful for eliminating duplicate copies in a collection of records (Why?) Sort-merge join algorithm involves sorting. Problem: sort 1Gb of data with 1Mb of RAM. why not virtual memory? Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 18 2-Way Sort: Requires 3 Buffers Pass 1: Read a page, sort it, write it. only one buffer page is used Pass 2, 3, …, etc.: three buffer pages used. INPUT 1 OUTPUT INPUT 2 Disk Main memory buffers Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke Disk 19 Two-Way External Merge Sort Each pass we read + write each page in file. N pages in the file => the number of passes log2 N 1 So toal cost is: 6,2 9,4 8,7 5,6 3,1 2 3,4 2,6 4,9 7,8 5,6 1,3 2 4,7 8,9 2,3 4,6 1,3 5,6 Input file PASS 0 1-page runs PASS 1 2 2-page runs PASS 2 2,3 2 N log 2 N 1 3,4 4,4 6,7 8,9 Idea: Divide and conquer: sort subfiles and merge Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1,2 3,5 6 4-page runs PASS 3 1,2 2,3 3,4 4,5 6,6 7,8 9 8-page runs 20 General External Merge Sort More than 3 buffer pages. How can we utilize them? To sort a file with N pages using B buffer pages: Pass 0: use B buffer pages. Produce N / B sorted runs of B pages each. Pass 2, …, etc.: merge B-1 runs. INPUT 1 ... INPUT 2 ... OUTPUT ... INPUT B-1 Disk B Main memory buffers Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke Disk 21 Cost of External Merge Sort Number of passes: 1 log B 1 N / B Cost = 2N * (# of passes) E.g., with 5 buffer pages, to sort 108 page file: Pass 0: 108 / 5 = 22 sorted runs of 5 pages each (last run is only 3 pages) Pass 1: 22 / 4 = 6 sorted runs of 20 pages each (last run is only 8 pages) Pass 2: 2 sorted runs, 80 pages and 28 pages Pass 3: Sorted file of 108 pages Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 22 Number of Passes of External Sort N B=3 B=5 100 7 4 1,000 10 5 10,000 13 7 100,000 17 9 1,000,000 20 10 10,000,000 23 12 100,000,000 26 14 1,000,000,000 30 15 B=9 3 4 5 6 7 8 9 10 Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke B=17 B=129 B=257 2 1 1 3 2 2 4 2 2 5 3 3 5 3 3 6 4 3 7 4 4 8 5 4 23 Internal Sort Algorithm Quicksort is a fast way to sort in memory. An alternative is “tournament sort” (a.k.a. “heapsort”) Top: Read in B blocks Output: move smallest record to output buffer Read in a new record r insert r into “heap” if r not smallest, then GOTO Output else remove r from “heap” output “heap” in order; GOTO Top Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 24 More on Heapsort Fact: average length of a run in heapsort is 2B Worst-Case: What is min length of a run? How does this arise? Best-Case: The “snowplow” analogy B What is max length of a run? How does this arise? Quicksort is faster, but ... Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 25 I/O for External Merge Sort … longer runs often means fewer passes! Actually, do I/O a page at a time In fact, read a block of pages sequentially! Suggests we should make each buffer (input/output) be a block of pages. But this will reduce fan-out during merge passes! In practice, most files still sorted in 2-3 passes. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 26 Number of Passes of Optimized Sort N 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000 1,000,000,000 B=1,000 1 1 2 3 3 4 5 5 B=5,000 1 1 2 2 2 3 3 4 B=10,000 1 1 1 2 2 3 3 3 Block size = 32, initial pass produces runs of size 2B. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 27 Double Buffering To reduce wait time for I/O request to complete, can prefetch into `shadow block’. Potentially, more passes; in practice, most files still sorted in 2-3 passes. INPUT 1 INPUT 1' INPUT 2 INPUT 2' OUTPUT OUTPUT' b Disk INPUT k block size Disk INPUT k' B main memory buffers, k-way merge Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 28 Sorting Records! Sorting has become a blood sport! Parallel sorting is the name of the game ... Datamation: Sort 1M records of size 100 bytes Typical DBMS: 15 minutes World record: 3.5 seconds • 12-CPU SGI machine, 96 disks, 2GB of RAM New benchmarks proposed: Minute Sort: How many can you sort in 1 minute? Dollar Sort: How many can you sort for $1.00? Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 29 Using B+ Trees for Sorting Scenario: Table to be sorted has B+ tree index on sorting column(s). Idea: Can retrieve records in order by traversing leaf pages. Is this a good idea? Cases to consider: B+ tree is clustered B+ tree is not clustered Good idea! Could be a very bad idea! Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 30 Clustered B+ Tree Used for Sorting Cost: root to the leftmost leaf, then retrieve all leaf pages (Alternative 1) If Alternative 2 is used? Additional cost of retrieving data records: each page fetched just once. Index (Directs search) Data Entries ("Sequence set") Data Records Always better than external sorting! Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 31 Unclustered B+ Tree Used for Sorting Alternative (2) for data entries; each data entry contains rid of a data record. In general, one I/O per data record! Index (Directs search) Data Entries ("Sequence set") Data Records Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 32 External Sorting vs. Unclustered Index N 100 1,000 10,000 100,000 1,000,000 10,000,000 Sorting p=1 p=10 p=100 200 2,000 40,000 600,000 8,000,000 80,000,000 100 1,000 10,000 100,000 1,000,000 10,000,000 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000 10,000 100,000 1,000,000 10,000,000 100,000,000 1,000,000,000 p: # of records per page B=1,000 and block size=32 for sorting p=100 is the more realistic value. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 33 Summary External sorting is important; DBMS may dedicate part of buffer pool for sorting! External merge sort minimizes disk I/O cost: Pass 0: Produces sorted runs of size B (# buffer pages). Later passes: merge runs. # of runs merged at a time depends on B, and block size. Larger block size means less I/O cost per page. Larger block size means smaller # runs merged. In practice, # of runs rarely more than 2 or 3. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 34 Summary, cont. Choice of internal sort algorithm may matter: The best sorts are wildly fast: Quicksort: Quick! Heap/tournament sort: slower (2x), longer runs Despite 40+ years of research, we’re still improving! Clustered B+ tree is good for sorting; unclustered tree is usually very bad. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 35