+ All Categories

13Phys

Date post: 07-Apr-2018
Category:
Upload: elizabeth-carvalho
View: 214 times
Download: 0 times
Share this document with a friend

of 24

Transcript
  • 8/3/2019 13Phys

    1/24

    Physical DatabaseDesign and Tuning

    R&G - Chapter 20

    Although the whole of this life weresaid to be nothing but a dream andthe physical world nothing but a

    phantasm, I should call this dreamor phantasm real enough, if, usingreason well, we were neverdeceived by it.

    Baron Gottfried Wilhelm von

  • 8/3/2019 13Phys

    2/24

    Introduction

    We will be talking at length about databasedesign Conceptual Schema: info to capture, tables, columns,

    views, etc. Physical Schema: indexes, clustering, etc.

    Physical design linked tightly to query optimization So well study this bottom up

    But note: DB design is usually top-down conceptual thenphysical. Then iterate.

    We must begin by understanding the work l oad : The most important queries and how often they arise.

    The most important updates and how often they arise.

  • 8/3/2019 13Phys

    3/24

    Understanding the Workload

    For each query in the workload: Which relations does it access?

    Which attributes are retrieved?

    Which attributes are involved in selection/join conditions?How selective are these conditions likely to be?

    For each update in the workload: Which attributes are involved in selection/join conditions?

    How selective are these conditions likely to be?

    The type of update (INSERT/DELETE/UPDATE), and theattributes that are affected.

  • 8/3/2019 13Phys

    4/24

    Creating an ISUD Chart

    Employee Table

    Transaction Frequency% table Name Salary Address

    Payroll Run monthly 100 S S S

    Add Emps daily 0.1 I I I

    Delete Emps daily 0.1 D D DGive Raises monthly 10 S U

    Insert, Select, Update, Delete Frequencies

  • 8/3/2019 13Phys

    5/24

    Decisions to Make

    What indexes should we create? Which relations should have indexes? What field(s) should

    be the search key? Should we build several indexes?

    For each index, what kind of an index should it be? Clustered? Dynamic/static?

    Should we make changes to the conceptual schema? More on this later

    Horizontal partitioning, replication, views ...

  • 8/3/2019 13Phys

    6/24

    Index Selection

    One approach: Consider most important queries in turn.

    Consider best plan using the current indexes, and see if

    better plan is possible with an additional index. If so, create it.

    Before creating an index, must also consider theimpact on updates in the workload! Trade-off: indexes can make queries go faster, updates

    slower. Require disk space, too.

  • 8/3/2019 13Phys

    7/24

    Issues to Consider in Index Selection

    Attributes mentioned in a WHERE clause arecandidates for index search keys. Range conditions are sensitive to clustering

    Exact match conditions dont require clustering Or do they???? :-)

    Try to choose indexes that benefit as many queries aspossible. NOTE: only one index can be clustered per relat ion!

    So choose it based on important queries that benefit themost from clustering!!

  • 8/3/2019 13Phys

    8/24

    Issues in Index Selection (Contd.) Multi-attribute search keys should be consideredwhen a WHERE clause contains several conditions.

    If range selections are involved, order of attributes shouldbe carefully chosen to match the range ordering.

    Such indexes can sometimes enable index-only strategies forimportant queries.

    For index-only strategies, clustering is not important!

    When considering a join condition: B+-tree on inner is very good for Index Nested Loops.

    Should be clustered if join column is not key for inner, and innertuples need to be retrieved.

    ClusteredB+ tree on join column(s) good for Sort-Merge.

  • 8/3/2019 13Phys

    9/24

    Example 1

    B+ tree index on D .dname supports Toy selection. Given this, index on D.dno is not needed.

    B+ tree index on E .dno allows us to get matching(inner) Emp tuples for each selected (outer) Depttuple. What if WHERE included: `` ... AND E.age=25 ?

    Could retrieve Emp tuples using index on E.age, then join

    with Dept tuples satisfying dnameselection. Comparable tostrategy that used E.dnoindex.

    So, ifE.ageindex is already created, this query providesmuch less motivation for adding an E.dnoindex.

    SELECT E.ename, D.mgrFROM Emp E, Dept DWHERE E.dno=D.dno AND D.dname=Toy

  • 8/3/2019 13Phys

    10/24

    Example 2

    All selections are on Emp so it should be the outerrelation in any Index NL join. Suggests that we build a B+ tree index on D.dno.

    What index should we build on Emp? B+ tree on E.salcould be used, OR an index on E.hobby

    could be used. Only one of these is needed, and which isbetter depends upon the selectivity of the conditions.

    As a rule of thumb, equality selections more selective than rangeselections.

    As both examples indicate, our choice of indexes isguided by the plan(s) that we expect an optimizer toconsider for a query. Have t o unde r s t and op t im i z e r s !

    SELECT E.ename, D.mgrFROM Emp E, Dept DWHERE E.sal BETWEEN 10000 AND 20000

    AND E.hobby=Stamps AND E.dno=D.dn

  • 8/3/2019 13Phys

    11/24

    Examples of Clustering B+ tree index on E.age can beused to get qualifying tuples.

    How selective is the condition?

    Is the index clustered?

    Consider the GROUP BY query. If many tuples have E.age> 10,

    using E.ageindex and sorting theretrieved tuples may be costly.

    Clustered E.dnoindex may be better!

    Equality queries and duplicates: Clustering on E.hobbyhelps!

    SELECT E.dnoFROM Emp EWHERE E.age>40

    SELECT E.dno, COUNT (*)FROM Emp E

    WHERE E.age>10GROUP BY E.dno

    SELECT E.dnoFROM Emp E

    WHERE E.hobby=Stamp

  • 8/3/2019 13Phys

    12/24

    Clustering and Joins

    Clustering is especially important when accessinginner tuples in INL. Should make index on E.dnoclustered.

    Suppose that the WHERE clause is instead:WHERE E.hobby=Stamps AND E.dno=D.dno If many employees collect stamps, Sort-Merge join may

    be worth considering. Aclusteredindex on D.dno wouldhelp.

    S u m m a r y : Clustering is useful whenever manytuples are to be retrieved.

    SELECT E.ename, D.mgr

    FROM Emp E, Dept DWHERE D.dname=Toy AND E.dno=D.dno

  • 8/3/2019 13Phys

    13/24

    Multi-Attribute Index Keys

    To retrieve Emp records with age=30 ANDsa l=4000,an index on would be better than an indexon age or an index on sa l .

    Such indexes also called compositeor concatenatedindexes. Choice of index key orthogonal to clustering etc.

    If condition is: 20

  • 8/3/2019 13Phys

    14/24

    Index-Only Plans

    A number ofqueries can beansweredwithoutretrieving anytuples from oneor more of therelationsinvolved if asuitable indexis available.

    SELECT D.mgrFROM Dept D, Emp EWHERE D.dno=E.dno

    SELECT D.mgr, E.eidFROM Dept D, Emp EWHERE D.dno=E.dno

    SELECT E.dno, COUNT(*)FROM Emp EGROUP BY E.dno

    SELECT E.dno, MIN(E.sal)FROM Emp E

    GROUP BY E.dno

    SELECTAVG(E.sal)FROM Emp EWHERE E.age=25 AND

    E.sal BETWEEN 3000 AND 5000

    B-tree trick!

    or

  • 8/3/2019 13Phys

    15/24

    Horizontal Decompositions

    Usual Def. of decomposition: Relation is replaced bycollection of relations that are pro jec t i ons . Mostimportant case. We will talk about this at length as part of Conceptual DBDesign

    Sometimes, might want to replace relat ion by acollection of relations that are se l e c t i ons .

    Each new relation has same schema as original, but subsetof rows.

    Collectively, new relations contain all rows of the original.

    Typically, the new relations are disjoint.

  • 8/3/2019 13Phys

    16/24

    Horizontal Decompositions (Contd.)

    Contracts (Cid, Sid, Jid, Did, Pid, Qty, Val) Suppose that contracts with value > 10000 aresubject to different rules.

    So queries on Contracts will often say WHERE val>10000. One approach: clustered B+ tree index on the va l field. Second approach: replace contracts by two new

    relations, LargeContracts and SmallContracts, withthe same attributes (CSJDPQV). Performs like index on such queries, but no index overhead.

    Can build clustered indexes on other attributes, in addition!

  • 8/3/2019 13Phys

    17/24

    Masking Conceptual Schema Changes

    Horizonal Decomposition from above Masked by a view.

    NOTE: queries with condition val>10000must be asked wrt

    LargeContracts for efficiency: so some users may have tobe aware of change.

    I.e. the users who were having performance problems

    Arguably thats OK -- they wanted a solution!

    CREATE VIEW Contracts(cid, sid, jid, did, pid, qty, val)AS SELECT *FROM LargeContractsUNION

    SELECT *FROM SmallContracts

  • 8/3/2019 13Phys

    18/24

    Index Tuning Wizards

    Both IBMs DB2 and MS SQL Server have automatedindex advisors Some info in Section 20.6 of the book

    Basic idea: They take a workload of queries

    Possibly based on logging whats been going on

    They use the optimizer cost metrics to estimate the cost ofthe workload over different choices of sets of indexes

    Enormous # of different choices of sets of indexes:

    Heuristics to help this go faster

  • 8/3/2019 13Phys

    19/24

    Tuning Queries and Views If a query runs slower than expected, check if an index needsto be re-clustered, or if statist ics are too old. Sometimes, the DBMS may not be executing the plan you had inmind. Common areas of weakness:

    Selections involving null values (bad selectivity estimates)

    Selections involving arithmetic or string expressions (ditto) Selections involving ORconditions (ditto)

    Complex subqueries (more on this later)

    Lack of evaluation features like index-only strategies or certain joinmethods or poor size estimation.

    Check the plan that is being used! Then adjust the choice ofindexes or rewrite the query/view. E.g. check via POSTGRES Explain command

    Some systems rewrite for you under the covers (e.g. DB2) Can be confusing and/or helpful!

  • 8/3/2019 13Phys

    20/24

    More Guidelines for Query Tuning Minimize the use of DISTINCT: dont need it ifduplicates are acceptable, or if answer contains akey. Minimize the use of GROUP BY and HAVING:

    SELECT MIN (E.age)FROM Employee EGROUP BY E.dnoHAVING E.dno=102

    SELECT MIN (E.age)FROM Employee EWHERE E.dno=102

    y Consider DBMS use of index when writingarithmetic expressions: E.age=2*D.agewillbenefit from index on E.age, but might not

    benefit from index on D.age!

  • 8/3/2019 13Phys

    21/24

    Guidelines for Query Tuning (Contd.)

    Avoid using intermediaterelations:SELECT * INTO TempFROM Emp E, Dept DWHERE E.dno=D.dno

    AND D.mgrname=Joe

    SELECT T.dno, AVG(T.sal)FROM Temp TGROUP BY T.dno

    vs.

    SELECT E.dno, AVG(E.sal)

    FROM Emp E, Dept DWHERE E.dno=D.dno

    AND D.mgrname=JoeGROUP BY E.dno

    and

    y Does not materialize the intermediate relnTemp.

    y If there is a dense B+ tree index on , an index-only plan can be used to avoidretrievin Em tu les in the second uer !

  • 8/3/2019 13Phys

    22/24

    Points to Remember

    Understanding the nature of the work l oad for theapplication, and the performance goals, is essentialto developing a good design. What are the important queries and updates? What

    attributes/relations are involved?

  • 8/3/2019 13Phys

    23/24

    Points to Remember

    Indexes must be chosen to speed up importantqueries (and perhaps some updates!). Index maintenance overhead on updates to key fields.

    Choose indexes that can help many queries, if possible. Build indexes to support index-only strategies.

    Clustering is an important decision; only one index on agiven relation can be clustered!

    Order of fields in composite index key can be important. Static indexes may have to be periodically re-built. Statistics have to be periodically updated.

  • 8/3/2019 13Phys

    24/24

    Points to remember (Contd.) Over time, indexes have to be fine-tuned (dropped,created, re-clustered, ...) for performance.

    Should determine the plan used by the system, and adjustthe choice of indexes appropriately.

    System may stil l not find a good plan: Only left-deep plans?

    Null values, arithmetic conditions, string expressions, the useofORs, nested queries, etc. can confuse an optimizer.

    So, may have to rewrite the query/view: Avoid nested queries, temporary relations, complex

    conditions, and operations like DISTINCT and GROUP BY.