1 חישוב ואופטימיזציה של שאילתות חלק 1 query evaluation and optimization...
Post on 20-Dec-2015
241 views
TRANSCRIPT
1
חישוב ואופטימיזציה של שאילתות
1חלק Query Evaluationand Optimization
Part 1
2
הקדמה:הבעיה הצגת
המשפיעים והגורמים
3
שאילתות: חישוב המטרההאפשר ככל יעילה בצורהמאוד: גדולה הנתונים כמות הבעיה
אחת בבת הנתונים כל את לקרוא אפשר איבחישוב להתחיל ואז הפנימי לזיכרון
: שלב – בכל לשלבים החישוב את לחלק צריך הפנימי לזיכרון מהנתונים חלק קוראים בזיכרון הנתונים לפי מהתוצאה חלק מחשבים
הפנימי שחושב התוצאה של החלק את לדיסק כותבים הבא לשלב עוברים
4
הנו הגורם I/Oהזמן הנדרש ל- העיקרי המשפיע על זמן החישוב של
שאילתה על הנתונים CPUהחישוב המתבצע ע"י ה-
הנמצאים בזיכרון הפנימי אינו מסובךהקריאה מהדיסק והכתיבה לדיסק הנם
איטיים )לפחות( פי אלף מהפעולות המתבצעות בזיכרון הפנימי
לפיכך, הזמן הנדרש לקריאה מהדיסק ולכתיבה על הדיסק הנו הגורם העיקרי המשפיע על זמן החישוב של שאילתות
5
הגורמים העיקריים המשפיעיםI/O על הזמן הנדרש ל-
ארגון הנתונים על הדיסקהשיטה בה מבצעים כל אחת מהפעולותקיימות מספר שיטות שונות לביצוע פעולת
הצירוף )כנ"ל לגבי פעולת הבחירה( -הזמן הנדרש לI/Oתלוי בשיטה
התוכנית שנבחרה לחישוב השאילתה כולה, קרי
השיטה שנבחרה לביצוע כל אחת מהפעולותהסדר שנבחר לביצוע הפעולות
6
שנלמד העיקריים הנושאים
כיצד מאורגנים נתונים על הדיסק וכיצד מבצעים (I/Oפעולות קלט-פלט )
שיטות לחישוב כל אחת מהפעולות האלגבריותדגש מיוחד על שיטות לחישוב הצירוף, שהיא הפעולה
היקרה ביותר והמורכבת ביותר
של שאילתה, שמוצא אלגוריתם לאופטימיזציהאת
לביצוע כל אחת מהפעולות, ואתהאופטימליתהשיטה ביותר לביצוע הפעולותהמהירהסדר
7
דוגמה
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(
מהי האפשרות המהירה ביותר?
8
הדוגמה המשך
פעולות צירוף2 אפשרויות לסידור 3כאמור יש 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(
חלק מהגורמים המשפיעים על הסדר האופטימליארגון היחסים על הדיסק
גודל תוצאת הביניים עדיף לבצע תחילה צירוף שהתוצאה שלו היא יחס קטן ככל
האפשר
9
לחישוב עיקריות שיטותיחסים שני של הצירוף
צירוף היא הפעולה האלגברית היקרה ביותר וקיימות עבורה מספר שיטות חישוב שונות:
Block Nested-Loops JoinIndex Nested-Loops Join
Sort-Merge JoinHash Join
בהמשך, נתאר כל אחת מהשיטות הללוכמו כן, נתאר שיטות לחישוב הפעולות
האלגבריות האחרות
10
האופטימיזציה לבעיית דוגמה
צריך )R)A,B( ⋈ S)B,C( ⋈ T)B,Dעבור לבחור
שיטה מתאימה לכל אחת משתי פעולות הצירוף אין צורך לבחור אותה שיטה לשתי הפעולות
סדר מתאים לביצוע הפעולותיש מספר רב של אפשרויות לבחור מתוכן
הבחירה של השיטה לכל פעולה עשויה להיות תלויה בסדר הפעולות
עשויה S לבין Rהשיטה האופטימלית לחישוב הצירוף בין להיות תלויה בשאלה האם צירוף זה מתבצע ראשון או שני
11
? חשובה היא אופטימיזציה מדוע
לחישוב האופטימלית התוכנית ביןלחישוב גרועה תוכנית לבין שאילתה
עצום הבדל להיות יכול שאילתה אותההבדל אפילו ואולי שניות לעומת שעות
יותר גדולהתוכנית את לבחור חשוב כך כל לא
מבחירת – להימנע חשוב ביותר המהירהגרועה תוכנית
12
ארגון הנתונים על הדיסק,מבנה הדיסק
I/Oואופן הביצוע של פעולות
13
יחסים אחסון
דיסקים על בקבצים מאוחסנים יחסיםמורכב אחיד( דפים )מבלוקיםדיסק גודל בעלי
בשלמותו להיכתב או להיקרא חייב בלוקותלוי אחיד אינו בלוק כתיבת או לקריאת הזמן
הדיסק ובמצב הדיסק על הבלוק במיקוםהבלוק, למיקום יחסית הזרועה נמצאת היכן כלומר
פי לפחות איטיים הנם מדיסק והכתיבה הקריאההפנימי מהזיכרון וכתיבה מקריאה אלף
14
15
מפשטות הנחות
מניחים זמן קבוע לקריאה או כתיבה של בלוק(bytes בתים )4K ל- 1Kבלוק טיפוסי מכיל בין
הזמן כאמור, המחיר של ביצוע שאילתה הנו תוך התעלמות הנדרש לקריאה וכתיבה מהדיסק,
CPUמהזמן שלוקחות פעולות ה- זאת הנחה סבירה, כי פעולות הדיסק לוקחות הרבה
CPUיותר זמן וניתנות לביצוע במקביל לפעולות ה-
16
כקובץ יחס אחסון
נפרד כקובץ מאוחסן יחס כל) דפים ) גם הנקראים מבלוקים בנוי קובץ
רבות רשומות בלוק בכלאפשרי בהחלט בבלוק רשומות עשרות
“ קריאת י ע מתבצעת רשומה על פעולה , הפנימי לזיכרון הרשומה את המכיל הבלוק
, בחזרה הבלוק וכתיבת הפעולה ביצועלדיסק
17
בבלוק רשומות אחסון
להיות יכולות קבוע רשומות או באורךמשתנה באורך
בביצוע לתמוך צריכה האחסון שיטתשל יעיל
בלוק בתוך רשומה מציאתרשומות ממחיקת המתפנה מקום ניצול
18
של העיקרי הרעיוןבבלוק רשומות ארגון
, המורכב )RID )Record IDרשומה מזוהה ע"י ממספר הבלוק וממספר הרשומה בתוך הבלוק
בסוף הבלוק יש מערך האומר היכן מתחילה כל רשומה הנמצאת בבלוק
של רשומה יכול להופיע במקומות RID: ה- הערהרבים במסד – בכל מקום שבו יש הפניה או
התייחסות לרשומה )אלא במחיר מאוד RIDלכן, אי אפשר לשנות את ה-
יקר(
19
בבלוק רשומות ארגון של הדגמה
אפשר להזיז את הרשומות בתוך הבלוק שלהןRIDבלי לשנות את ה-
Page iRid = )i,N(
Rid = )i,2(
Rid = )i,1(
Pointerto startof freespace
SLOT DIRECTORY
N … 2 120 16 24 N
#slots
20
(Bufferחוצץ )
, שלתוכו לחוצץ מוקצה הפנימי מהזיכרון חלקמהדיסק בלוקים נקראים
) דפים ) הבלוקים על פועלות האפליקציה תוכניותבחוצץ הנמצאים
, בחוצץ הנמצא בבלוק השימוש מסתיים כאשראחר בלוק לטובת מקומו את לנצל ניתן
, לכתוב צריך בחוצץ שהיה בזמן השתנה הבלוק אםאחר בלוק לטובת מקומו את שמפנים לפני לדיסק אותו
21
חוצץ ניהול
Data must be in RAM for DBMS to operate on itTable of <frame#, pageid> pairs is maintained
DB
MAIN MEMORY
DISK
disk page
free frame
Page Requests from Higher Levels
BUFFER POOL
choice of frame dictatedby replacement policy
22
כיצד מחליטים איזה בלוק יפנה את מקומו?(Replacement Policy)מדיניות החלפה –
LRU )Least Recently Used( מחליפים – את הבלוק שנעשה בו שימוש הכי רחוק בעבר
OSמדיניות מקובלת בניהול זיכרון וירטואלי ע"י ה-
MRU )Most Recently Used(לעיתים מדיניות זאת טובה יותר, למשל במעבר
סדרתי על קובץ, כאשר צריך לעבור על הקובץ באופן סדרתי מספר פעמיםמספר הבלוקים בחוצץ קטן ממספר הבלוקים בקובץ
23
במערכת להשתמש ניתן , אבל החוצצים לניהול ההפעלה
מערכות לניהול מסדי נתונים מעדיפות לנהל את החוצצים בעצמן, כי
DBMSכך קל יותר להשיג תאימות של ה- למספר מערכות הפעלה שונות
יש היבטים שלא קיימים במערכות הפעלה ומצריכים טיפול מיוחד
תוכניות שרצות במקביל ומשתמשות באותו בלוק מדיניות החלפה שונה מזו שמתאימה לזיכרון
וירטואליקריאה מקדימה של בלוקים לתוך החוצץ
24
בלוקים של מקדימה קריאההחוצץ לתוך
במקביל I/Oכאמור, ניתן לבצע פעולות CPUלחישובים המבוצעים ע"י ה-
אם בתוכנית לחישוב שאילתה הוחלט שיש לעבור על קובץ באופן סדרתי, אז אפשר
לקרוא בכל שלב מספר בלוקים לתוך החוצץ )בהתאם לגודל החוצץ(, כאשר
פועל על הבלוקים CPUבאותו הזמן ה- שנקראו בשלב הקודם
25
קבצים סוגי
26
יחסים לאחסון קבצים סוגי
(Heap fileקובץ ערמה )הרשומות מאוחסנות )ללא מיון( בבלוקים,
שמשורשרים זה לזה
(Sorted fileקובץ ממוין )טוב לשליפת כל הרשומות לפי סדר המיון או למציאת
הרשומות בטווח מסוים של ערכים
(Hash fileקובץ ערבול )המפתח פונקצית הערבול מקבלת ערכים עבור
ומוצאת רשומות עם ערכים אלה
27
קובץ על הפעולות
הוספת או מחיקת רשומה בודדתחיפוש לפי ערך עבור המפתח
קובץ ערמהמוסיפים בסוף הקובץ
קובץ ממויןהקובץ ממוין לפי המפתח
מכווצים את הקובץ לאחר מחיקה
קובץ ערבול תפוסהoverflow, 80%אין
28
שקובעים קובץ של המאפייניםלביצוע הנדרש הזמן את
הפעולות Bמספר הבלוקים של הקובץ –
Rמספר הרשומות בבלוק – Dהזמן )הממוצע( לקרוא בלוק –
בעזרת הפרמטרים האלה נקבע את ( הנדרש I/Oהזמן )של פעולות ה-
לביצוע הפעולות בסוגי הקבצים השונים
29
הערה
מקריאה מקדימה מתעלמים (pre-fetching של בלוקים )
קריאה מקדימה חוסכת זמן, כי היא מתבצעת במקביל לעיבוד בלוקים שכבר
נמצאים בזיכרוןאבל קשה להביא אותה בחשבון באופן
מדויקבמקרה הגרוע ביותר אי אפשר לבצע
קריאה מקדימה
30
הפעולות לביצוע הנדרש הזמןערמהממויןערבול
1.25BDBDBD כל על מעברהרשומות
DDlog2B0.5BD רשומה חיפושמפתח לפי
1.25BDD)log2B + # of pages with matches(
BD כל חיפושבטווח הרשומות
נתון
2DSearch + BD2D רשומה הוספת
2DSearch + BDSearch + D
רשומה מחיקת
31
אינדקסים
אינדקס מעל קובץ )קרי, יחס( נבנה עבור (search key )מפתח חיפוש
מפתח חיפוש הוא אוסף כלשהו של שדות, שאיננו בהכרח מפתח של היחס
בהינתן ערך עבור מפתח החיפוש, האינדקס מאפשר להגיע ישירות לכל
הרשומות בעלות הערך הנתון )יכולה להיות יותר מרשומה אחת עם אותו ערך עבור
מפתח החיפוש(
32
למבנה האפשרויות שתיאינדקס של הרשומות
של יחס, כלומר האינדקס הוא רשומות רגילותחלק מקובץ שמאחסן רשומות של יחס
במקרה זה האינדקס חייב להיות על המפתח הראשילכל היותר אינדקס אחד יכול להיות כזה
( לקובץ אחרdata entries )נתוני כניסהנתוני כניסה הן רשומות שמאפשרות להגיע במהירות
לכל הרשומות, בקובץ האחר, שיש להן את הערך המבוקש עבור מפתח החיפוש
במקרה זה האינדקס הוא קובץ נפרד
33
של למבנה האפשרויותכניסה נתוני
k(, כאשר k, ridנתוני כניסה מהצורה ) הוא )rid )record identifierהוא ערך ו-
kמצביע לרשומה של היחס עם הערך ( היא מאורך קבוע ויכולות k, ridהרשומה )
kלהיות מספר רשומות עבור ערך נתון של
(k, list of ridsנתוני כניסה מהצורה )זוהי רשומה מאורך משתנה ויש רק רשומה
kאחת עבור ערך נתון של
34
: אינדקסים סיווגאינדקס לעומת ראשי אינדקס
משני – מפתח החיפוש מכיל מפתח אינדקס ראשי
ראשי של היחס – אחרת אינדקס משני
פירוש אחר: אינדקס ראשי מכיל רשומות של קובץ, בעוד שאינדקס משני מכיל נתוני כניסה
35
: אינדקסים סיווגשאינו אינדקס לעומת מקובץ אינדקס
מקובץ( – סדר הרשומות clustered index )אינדקס מקובץ
באינדקס זהה או "קרוב" לסדר הרשומות בקובץ( – אחרתunclustered index )אינדקס לא מקובץ
אינדקס שמכיל רשומות של קובץ הוא תמיד מקובץ, אבל אינדקס מקובץ יכול להיות בנוי גם מנתוני כניסה
לכל היותר אינדקס אחד יכול להיות מקובץשליפת רשומות לפי אינדקס לא מקובץ לוקחת יותר זמן
אינדקס מקובץ, שהנו נפרד מהקובץ עצמו, דורש תהליך יקר למדי של עדכון, כדי שיישאר מקובץ גם לאחר
עדכונים תכופים של הקובץ עצמו
36
קובץ עבור מקובץ אינדקס בנייתערמה
מיין את הערמה והשאר בכל בלוק שטח פנוי להוספת רשומות בעתיד
overflowבעתיד יתכן ויהיה צורך בבלוקים של לצורך הוספת רשומות – לכן הסדר של רשומות האינדקס קרוב, אבל לא זהה, לזה של רשומות
Index entriesהקובץ
Data entries
direct search for
(Index File)(Data file)
Data Records
data entries
Data entries
Data Records
CLUSTERED UNCLUSTERED
37
דליל ואינדקס צפוף אינדקס
שומר רק חלק מהערכים של אינדקס דלילמפתח החיפוש
חייב להיות אינדקס מקובץ
kכדי למצוא את הרשומות של הקובץ עם מפתח כך ש-bמחפשים ערך
b -הערך הגדול ביותר באינדקס שעדיין אינו גדול מ k
ממשיכים לחפש בקובץ בסדר עולה מהרשומה bהראשונה עם הערך
38
מורכב חיפוש מפתח
כאשר מפתח חיפוש כולל כמה שדות, רצוי למיין את השדות השונים לפי מיון לקסיקוגרפי )או
לבחור בשיטת אכסון מתוחכמת יותר(, כדי שניתן יהיה לבצע ביעילות חיפוש טווח על חלק
מהשדות(age, salלדוגמה, אינדקס על )
age=20חפש רשומות עם age=20 and sal>1000חפש רשומות עם
מצא כל הרשומות עםsal=20 ובחר מתוכן את 1000אלה עם המשכורות הגדולות מ-
39
אינדקסים של מבנים סוגי
אינדקס מבוסס על עץ חיפוש מאוזן הוא הנפוץ ביותר+Bעץ
מאפשר חיפוש לפי טווח
אינדקס מבוסס על ערבול extendible )ערבול בר-הרחבהמחייב
hashing כלומר אפשרות להגדיל את מספר ,)הדליים )ולשנות בהתאם את פונקצית
הערבול( כאשר מתווספות רשומותמאפשר חיפוש רק לפי שוויון
40
+Bשקפים על עץ
בספר 9להלן שלושה שקפים מפרק +B על עץ Ramakrishnanשל
41
B+ Tree: The Most Widely Used Index
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 d <= m <= 2d entries. The parameter d is called the order of the tree.Supports equality and range-searches efficiently.
Index Entries
Data Entries"(Sequence set)"
(Direct search)
42
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
43
B+ Trees in Practice
Typical order: 100. Typical fill-factor: 67%.
average fanout = 133
Typical capacities:Height 4: 1334 = 312,900,700 recordsHeight 3: 1333 = 2,352,637 records
Can often hold top levels in buffer pool:Level 1 = 1 page = 8 KbytesLevel 2 = 133 pages = 1 MbyteLevel 3 = 17,689 pages = 133 MBytes
44
+Bנושאים נוספים על עצי 9בפרק
הוספה ומחיקה של רשומותצריך לדאוג שכל צומת יישאר לפחות חצי מלא
צריך לדאוג שהעץ יישאר מאוזן
עבור קובץ נתון+Bבנייה ראשונית של עץ דחיסת מפתחות בעלים הפנימיים
ולכן מקטין את עומק fan-outמגדיל את ה- העץ
45
נכסה שלא נוספים נושאים
עוסק באינדקסים הבנויים על ערבול10פרק עוסק במיון חיצוני11פרק
כלומר, שיטות מיון כאשר אי אפשר לקרוא בבת אחת את כל הנתונים לתוך הזיכרון הפנימי
מיון חיצוני נחוץ כאשר רוצים תוצאה ממוינת( למחיקת עותקים כפולים של רשומותDISTINCT) לצורך ביצועgroup by לביצועsort-merge join)אחת השיטות של צירוף(