1 חישוב ואופטימיזציה של שאילתות חלק 1 query evaluation and optimization...

Post on 20-Dec-2015

241 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

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)אחת השיטות של צירוף(

top related