1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization...
-
date post
20-Dec-2015 -
Category
Documents
-
view
228 -
download
2
Transcript of 1 חישוב ואופטימיזציה של שאילתות חלק 2 Query Evaluation and Optimization...
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בשלב לכל מחשבים האלגוריתם שלאת לקרוא האפשרויות כל של המחיר את , או באינדקסים שימוש תוך מהדיסק היחס
היחס כל על סדרתי במעבר