1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization...

40
1 ההההה הההההההההההה הה ההההההה ההה2 Query Evaluation and Optimization Part 2
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    228
  • download

    2

Transcript of 1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization...

1

חישוב ואופטימיזציה של שאילתות

2חלק Query Evaluationand Optimization

Part 2

2

שיטות לחישוב צירוףR(A,B) ⋈ S(B,C)

Rאם יש מספיק זיכרון, קרא את בשלמותו לזיכרון

, קרא את הבלוק Sלכל בלוק של לזיכרון וחשב את הצירוף של

הרשומות מבלוק זה עם כל הרשומות Rשל

כתוב תוצאה לדיסק וקרא הבלוק Sהבא של

3

הנדרשת הזיכרון כמות

שני מבין הקטן של הבלוקים מספר2היחסים +

השני היחס לקריאת אחד בלוקהתוצאה לכתיבת שני בלוק

, לדיסק אותו כותבים מתמלא כשהואמחדש למלאו ומתחילים

4

כולל חישוב זמן

BR -בלוקים ב R -ו BS -בלוקים ב S נקרא פעם אחתS ו- Rכל בלוק של

כל בלוק של התוצאה נכתב פעם אחתBR + BS + output size :זמן כולל

נתעלם מהזמן הדרוש לכתיבת התוצאה, כי הוא זהה בכל השיטות

BR + BSלכן הזמן הוא

5

משני אחד כל אם עושים מה? הפנימי מהזיכרון גדול היחסים

בלוקים Bבזיכרון הפנימי יש בלוקיםB-2 בחלקים – כל פעם Rקרא את

, בלוק S, קוראים את כל Rעבור כל חלק של אחד בכל פעם

Sחשב את הצירוף של הרשומות מהבלוק של שנמצא בזיכרוןRעם הרשומות מהחלק של

, S איטרציות שבהן קוראים את כל יש נקרא פעם אחתRבעוד ש-

הזמן הנדרש הוא )2/( BBBB RSR

)2/( BBR

6

הערה

הזמן הואלכן עדיף שהיחס הקטן יותר הוא זה

שיקרא בחלקים, כלומר בלולאה החיצונית

השיטה הזאת נקראת Block Nested-Loops Join

)2/( BBBB RSR

7

כאשר R(A,B) ⋈ S(B,C)חישוב S של Bיש אינדקס על עמודה

ולכל רשומה מהבלוקRקרא בלוק של מצא בעזרת האינדקס את כל הרשומות

Sהמתאימות של פעם אחת בלבדRקוראים את

את הזמן X, נסמן ע"י Rבהינתן רשומה של הנדרש כדי למצוא את כל הרשומות המתאימות

Sשל )R מס' הרשומות ב- tRהזמן הכולל (

Index Nested-Loops Joinהשיטה נקראת XtB RR

8

?Xמהו

נניח שהאינדקס מכיל נתוני כניסה מהצורה ) k, rid(

kגם אם יש הרבה נתוני כניסה עם אותו עדיין סביר להניח שכולם על בלוק אחד,

bשיקרא 1.2באינדקס ערבול צריך, בממוצע, לקרוא

bבלוקים כדי להגיע לבלוק בלוקים כדי 4-2 צריך לקרוא +Bבאינדקס

bלהגיע לבלוק

9

Xהמשך החישוב של

Sצריך לקרוא גם את הרשומות עצמן מהיחס אם האינדקס מקבץ, אפשר להניח (שבדר"כ)

ולכןSכולן על בלוק אחד של Sצריך לקרוא בלוק אחד של

אם האינדקס אינו מקבץ, אז כל רשומה מתאימה נמצאת על בלוק נפרד, ומספר הבלוקים Sשל למספר הרשומות של שצריך לקרוא שווה Sשל

S שמתאימות לרשומה אחת של R נתאר)בהמשך איך להעריך מספר זה)

10

לדוגמה

אם מדובר באינדקס ערבול מקבץ, אז X=2.2והזמן הכולל הוא

לעומת בשיטה Block Nested-Loops Joinשל

RR tB 2.2

)2/( BBBB RSR

11

R(A,B) ⋈ S(B,C)חישוב של Sort-Merge Joinע"י

ואז ממזגים:Bממיינים כ"א מהיחסים על R.B >= S.B עד ש- Rעוברים על S.B >= R.B עד ש- Sעוברים על

R.Bחוזרים על שני הצעדים הקודמים עד ש- = S.B ואז קוראים לזיכרון את כל החלק ,

B ששווים על S וכל החלק של Rשל ומחשבים את הצירוף בין שני חלקים אלה

12

⋈ R(A,B)זמן החישוב של S(B,C) ע"י Sort-Merge Join זמן למיון

זמן למיזוג (תחת איזה הנחה?)סה"כ

SSRR BBBB loglog

)(loglog SRSSRR BBBBBB

)( SR BB

13

Hash-JoinPartition both relations using hash fn h: R tuples in partition i will only match S tuples in partition i.

Read in a partition of R, hash it using h2 (<> h!). Scan matching partition of S, search for matches.

Partitionsof R & S

Input bufferfor Si

Hash table for partitionRi (k < B-1 pages)

B main memory buffersDisk

Output buffer

Disk

Join Result

hashfnh2

h2

B main memory buffers DiskDisk

Original Relation OUTPUT

2INPUT

1

hashfunction

h B-1

Partitions

1

2

B-1

. . .

14

Hash Join

Partition both relations using hash function h

R tuples in partition i will only match S tuples in partition i

Read in a partition of R, hash it using h2 (<> h!)

Scan matching partition of S, search for matches

15

B main memory blocks DiskDisk

Original Relation OUTPUT

2INPUT

1

hashfunction

h B-1

Partitions

1

2

B-1

. . .

Partition R & S using h

16

Partitionsof R & S

Input bufferfor Si

Hash table for partitionRi (k < B-1 pages)

B main memory blocksDisk

Output buffer

Disk

Join Result

hashfnh2

h2

Read partition Ri & partition it using h2

Partition Si is joined with Ri

17

Hash Joinהמחיר של

אם יש מספיק מקום בזיכרון וה- Partitions ,הן פחות או יותר בגודל שווה

אז בשלב הראשון קוראים וכותבים כל יחס פעם

אחת בלבדובשלב השני קוראים כל יחס פעם אחת

)BR + BS(3לכן המחיר הכולל הוא

18

כמות הזיכרון הנדרשת לביצוע Hash Join

בלוקים בזיכרון אז מספר ה- Bאם יש Partitions הוא לכל היותר k=B-1

הואPartitionלכן הגודל של כל בלוקים לכל לכן צריך בשלב השני

Partition כאשר ,f הוא מקדם גדול מלאים100%, כי הדליים אינם 1מ-

1BBR

1BfBR

19

המשך חישוב כמות הזיכרון Hash Joinהנדרשת לביצוע

בלוקיםכאמור, בשלב השני צריך בלוקים וצריך גם אחד Bיש בסך הכל

לכתיבת התוצאה ואחד לקריאת היחס השני, ולכן

היחס Rבלוקים, כאשר לפיכך, צריך הקטן יותר

21

B

fBB R

1BfBR

RfBB

לא בגודל Partitionsלמעשה צריך קצת יותר, כי ה- שווה

20

שיטה משופרת ל-Sort-Merge Join (SMJ)

שלוקחת SMJ -יש שיטה משופרת לhash join: 3(BR + BS)אותו זמן כמו

בלוקים שיטה זאת דורשת הוא הגדול משני Sבזיכרון, כאשר

)12היחסים (פרטים בפרק SMJ מייצרת תוצאה ממוינת וזמן

worst caseהחישוב הוא

sBB

21

כה עד סיכום

ראינו שיטות שונות לחישוב צירוף של שני יחסים

לכל שיטה נוסחה עבור זמן החישובאין שיטה שהיא תמיד הכי טובה

, 12 (בשקפים פרק 12בספר בפרק ), מתוארות שיטות לחישוב Bחלק

הפעולות האלגבריות האחרות

22

: כללי ביטוי לחישוב עקרונותיחסים. 1 הקטנת

בשאילתה כללית יש מספר פעולות וצריך למצוא את שיטת החישוב הזולה ביותר של

כלל הפעולותיחסים קטנים יותר ⇐ זמן חישוב מהיר יותר

משתמשים בשקילויות אלגבריות, כדי להקטין יחסים בשלב מוקדם ככל האפשר

דחיפת בחירה והטלהע"י

23

דוגמה

AC(B=5(R(A,B) ⋈ S(B,C) ⋈ T(C,D)))נדחוף בחירה והטלה פנימה, ככל האפשר

תחילה נחשבR’(A,B) = (B=5(R(A,B))

S’(B,C) = (B=5(S(B,C))

T’(C) = C(T(C,D))

ואז נחשבAC(R’(A,B) ⋈ S’(B,C) ⋈ T’(C))

24

. מבצעים פעולות בחירה 2on the flyוהטלה

תוצאת ביניים צריך לכתוב על דיסק ואח"כ לקרוא שוב להמשך החישוב, ולכן זה מייקר

מאוד את זמן החישובפעולות בחירה (שנוגעות ליחס אחד בלבד)

מבצעים כאשר קוראים יחס זה לראשונה) R.A = S.Dבחירה שכוללת מספר יחסים (

מבצעים כחלק מפעולת הצירוף

הטלות מבצעים כאשר מייצרים תוצאות של צירוף (וכשהדבר אפשרי, מבצעים הטלה

כשקוראים יחס בפעם הראשונה)

25

דוגמה

AC(B=5(R(A,B) ⋈ S(B,C) ⋈ T(C,D)))נדחוף בחירה והטלה פנימה, ככל האפשר

תחילה נחשבR’(A,B) = (B=5(R(A,B))

S’(B,C) = (B=5(S(B,C))

T’(C) = C(T(C,D))

ואז נחשבAC(R’(A,B) ⋈ S’(B,C) ⋈ T’(C))

Rתוך כדי קריאת 1. מבצעים Sו-

בחירה

Tתוך כדי קריאת 2.מבצעים הטלה

הטלה מבצעים שוב הסופית התוצאה כתיבת כדי תוך

26

. לא מבצעים מכפלה קרטזית3

צריך למצוא את הסדר היעיל ביותר לחישוב פעולות הצירוף

בודקים את המחיר של כל סדר אפשרי, במטרה למצוא את הסדר הזול ביותראבל מתעלמים מסדר שכולל מכפלה

קרטזית, אלא אם כן השאילתה דורשת לחשב מכפלה קרטזית

27

דוגמה

AC(B=5(R(A,B) ⋈ S(B,C) ⋈ T(C,D)))

האפשרויות לחישוב הביטוי הנ"ל הןR(A,B) ⋈ (S(B,C) ⋈ T(C,D))

)R(A,B) ⋈ S(B,C)( ⋈ T(C,D))R(A,B) ⋈ T(C,D) ( ⋈S(B,C)

אבל האפשרות השלישית כוללת מכפלה קרטזית ולכן מתעלמים ממנה

28

. פעולות צירוף מבצעים 4Pipe Lineבשיטת ה-

כדי להימנע מכתיבת תוצאות ביניים, מזרימים, חלק חלק, את התוצאה של

פעולת צירוף לתהליך החישוב של פעולת הצירוף הבאה

כזכור, פעולות בחירה והטלה עם פעולות on the flyמתבצעות

הצירוף

29

דוגמה

נניח שמחשבים את הביטוי)R(A,B) ⋈ S(B,C)( ⋈ T(C,D)

מחשבים חלק מהתוצאה של הצירוף הראשון, ומשתמשים בחלק זה כדי להתחיל

לחשב את הצירוף השניכאשר החישוב של הצירוף השני מסתיים

עבור החלק הראשון, מחשבים חלק נוסף של הצירוף הראשון

30

. בודקים רק אפשרויות שהן5Left-Deep

כל על לעבור צריך עקרוניתפעולות של סדרה לחישוב האפשרויות

צירוףאפשרויות על רק עוברים למעשה , , תוצאת שלב בכל מצרפים שבהן

) ממסד ) יחס עם קודם שלב של בינייםהנתונים

31

דוגמה

מביאים בחשבון את הסדר )R(A,B) ⋈ S(B,C)( ⋈ T(C,D)) ⋈

P(D,E)(אבל כדי לצמצם את מרחב החיפוש,

מתעלמים מהסדר הבא )R(A,B) ⋈ S(B,C)( ⋈ )T(C,D) ⋈

P(D,E)(

32

הסיבות למעבר רק על Left Deepאפשרויות שהן

מצמצם את מרחב החיפוש fullyמאפשר לבצע חישוב שהוא

pipelined כלומר כותבים לדיסק רק את ,התוצאה הסופית (ואין צורך לרשום לדיסק

שום דבר בשלבי ביניים), זאת בתנאי ש- Nested-Loopsבשיטות של משתמשים

Joins

מאפשר ניצול מקסימלי של אינדקסים הקיימים עבור היחסים של מסד הנתונים

33

למעבר דינמי תכנות אלגוריתםהאפשרויות מרחב כל על

יחסיםnנמצא דרך אופטימלית לצירוף של

R1 ⋈ R2 ⋈ … ⋈ Rn

i מחשבים, לכל תת-קבוצה של iבשלב ה- יחסים, את המחיר האופטימלי של צירוף

היחסים בתת-קבוצה זו מגדילים כל תת-קבוצה ע"י i+1בשלב ה-

הוספת יחס נוסף, ומחשבים את המחיר האופטימלי של תת-הקבוצה החדשה,

שמתבסס על המחיר שחושב בשלב הקודם

34

- קבוצה לתת האופטימלי המחיר

,R1, R2}המחיר האופטימלי לתת-קבוצה

R4}נקבע לפי הסדר האופטימלי לביצוע פעולות הצירוף של

היחסים בתת-הקבוצהשיטה ספציפית לביצוע כ"א מפעולות הצירוף,

כך שהמחיר הכולל הוא הנמוך ביותר

לכן, צריך לעבור על כל הסדרים האפשריים ולכל סדר אפשרי לעבור על כל

האפשריות לביצוע של פעולות הצירוף

35

התכנות של השיטה פועלת כיצדהדינמי

כדי לקבוע את התוכנית האופטימלית לתת-קבוצה {R1, R2, R3, R4} בוחרים את התוכנית האופטימלית

מבין האפשרויות הבאות כאשר מוסיפים {R2, R3, R4}התוכנית האופטימלית עבור R1לה בשלב האחרון צירוף עם

כאשר מוסיפים {R1, R3, R4}התוכנית האופטימלית עבור R2לה בשלב האחרון צירוף עם

כאשר מוסיפים {R2, R1, R4}התוכנית האופטימלית עבור R3לה בשלב האחרון צירוף עם

כאשר מוסיפים {R2, R3, R1}התוכנית האופטימלית עבור R4לה בשלב האחרון צירוף עם

36

את רק לחשב מספיק לא אבללכל האופטימלי המחיר

קבוצה- תת)R(A,B) ⋈ S(B,C)( ⋈ T(B,D)

S ו- R של sort-merge joinיתכן ש- אינו היעיל ביותר, אבל הוא מייצר

Bתוצאה שממוינת על , אז הצירוף עם B ממוין על Tאם גם

T זול עד כדי כך, שהמחיר הכולל הוא הזול ביותר

37

- מחיר מחשבים קבוצה תת לכלכל מעניין עבור סדר

יחסים, מחשבים את iעבור תת-קבוצה של מחיר הצירוף לכל אפשרות שמייצרת את התוצאה ממוינת על אטריביוט(ים) כלשהו

כמו כן, אם המחיר של האפשרות, שמייצרת תוצאה ללא סדר כלשהו, הוא

הזול ביותר, אז שומרים לשלב הבא גם את המחיר הזה

38

דוגמה

)R(A,B) ⋈ S(B,C)( ⋈ T(C,D) ⋈ P(B,D) sort-merge joinמחשבים את המחיר של

B, כי הוא מייצר תוצאה ממוינת על S ו- Rשל , אז מוצאים גם את המחיר C ממוין על Sאם

, מבין S ו- Rהזול ביותר לחישוב הצירוף של כל האפשרויות (אם יש כאלה) שמשאירות את

Cהתוצאה ממוינת על הוא הזול ביותר, אז משאירים hash joinאם

גם את המחיר שלו לשלב הבא

39

האלגוריתם 1שלב של

יחס 1בשלב לכל מחשבים האלגוריתם שלאת לקרוא האפשרויות כל של המחיר את , או באינדקסים שימוש תוך מהדיסק היחס

היחס כל על סדרתי במעבר

40

האלגוריתם סיום

האופטימליים המחירים את מקבלים בסיום , כל עבור היחסים כל של הצירוף לחישוב

המעניינים הסדריםהאפשרות לפי השאילתה את מחשבים

ביותר הזול המחיר את שנותנת