תכנון וכוונון מסד הנתונים ( Tuning the Database )
description
Transcript of תכנון וכוונון מסד הנתונים ( Tuning the Database )
מסדי נתונים תשס"ג 1
תכנון וכוונון מסד הנתונים( Tuning the Database)
קורס מסדי נתונים
מסדי נתונים תשס"ג 2
ייעול פעולת מערכת מסד הנתונים
ניתן לייעל את פעולת מערכת מסד •הנתונים על ידי שינוי פרמטרים שונים:
buffer poolגודל ה-–checkpointsתדירות ביצוע –תכנון נכון של מסד הנתונים )טבלאות, –
אינדקסים(
(designתכנון ) (tuningכוונון ) עבודה שוטפת
מסדי נתונים תשס"ג 3
דרישה ראשונית
נדרשת הבנה של עומס העבודהעל המערכת ואופי השימוש במערכת
נדרשת הבנה של עומס העבודהעל המערכת ואופי השימוש במערכת
פעולות עדכוןפעולות עדכוןשאילתותשאילתות
ריבוי משתמשיםועבודה במקבילריבוי משתמשיםועבודה במקביל
מסדי נתונים תשס"ג 4
עומס עבודה
רשימת שאילתות והתדירות שלהן ביחס 1.לכלל השאילתות ופעולות העדכון
רשימת פעולות העדכון והתדירות שלהן 2.ביחס לכלל השאילתות ופעולות העדכון
היעילות הנדרשת מכל סוג של שאילתה 3.ושל פעולת עדכון
מסדי נתונים תשס"ג 5
מידע על שאילתות בעומס העבודה
לאילו יחסים השאילתה ניגשת•אילו אטריביוטים השאילתה מחזירה •
(select)אילו אטריביוטים מופיעים בתנאי בחירה או •
( ועד כמה whereכחלק מתנאי צירוף )התנאי סלקטיבי
מסדי נתונים תשס"ג 6
מידע על פעולות עדכון בעומס עבודה
(update, insert, deleteסוג פעולת העדכון )•, אילו updateבמקרה של פעולת •
(setאטריביוטים השאילתה משנה )אילו אטריביוטים מופיעים בתנאי בחירה או •
( ועד כמה whereכחלק מתנאי צירוף )התנאי סלקטיבי
מסדי נתונים תשס"ג 7
החלטות שיש לקבל תוך כדי תכנון וכוונון מסד הנתונים
אילו אינדקסים לייצר•על אילו יחסים ועל אילו שדות ליצור אינדקסים–איזה סוג אינדקס נדרש במקרים השונים )מקבץ/לא מקבץ, –
/על ידי המרה(+Bדליל/צפוף, על ידי עץ
האם לשנות את הסכמה הכללית לצורך שיפור •ביצועים
בחירה בין אלטרנטיבות פירוק שיש להן אותה צורה נורמלית–איחוד סכימות על אף הורדת הצורה הנורמלית–חלוקת אנכית של סכימות–( viewsיצירת הגדרות תצפית )–
שכתוב שאילתות•
מסדי נתונים תשס"ג 8
קווים מנחים לבחירת אינדקסים
בוחנים את השאילתות החשובות •בוחנים את תוכניות הביצוע של השאילתות•בוחנים את השפעת הוספת האינדקסים על •
ביצוע השאילתות
מסדי נתונים תשס"ג 9
Oracleיצירת אינדקסים ב-מייצרים אינדקס בעזרת הפקודה:•
ניתן לייצר גם אינדקס מקבץ:•
CREATE [UNIQUE] [BITMAP] INDEX index-name ON table (column [,column]…);
CREATE CLUSTER ReservesCluster (A integer);
CREATE TABLE Reserves (sid INTEGER,bid INTEGER,rdate DATE)
CLUSTER ReservesCluster (sid);
CREATE INDEX ReservesNDX ON CLUSTER ReservesCluster;
מסדי נתונים תשס"ג 10
קווים מנחים לבחירת אינדקסים
אין צורך )האם לייצר אינדקס(:1קו מנחה •לייצר אינדקס שאף שאילתה או פעולת עדכון לא ירוויחו ממנו. רצוי לייצר אינדקסים באופן שמספר
שאילתות ופעולות עדכון ירוויחו מהם בוחנים )בחירת מפתח חיפוש(:2קו מנחה •
של שאילתהwhereאטריביוטים שמופיעים ב-בחירה על ידי תנאי של התאמה מדוייקת מובילה –
לאינדקס על האטריביוט שמופיע בתנאי עם העדפה (hash indexלאינדקס המרה )
תנאי בחירה על טווח ערכים מוביל לשימוש באינדקס – על האטריביוט המופיע בתנאי+Bמבוסס עץ
מסדי נתונים תשס"ג 11
קווים מנחים לבחירת אינדקסים
אינדקס )מפתח חיפוש מרובה אטריביוטים(:3קו מנחה •שמפתח החיפוש שלו מורכב ממספר אטריביוטים ישמש במקרים
הבאים כולל תנאים על מספר אטריביוטים של יחסwhereתנאי ה-–
האינדקס מאפשר פעולות שיתבצעו על האינדקס במקום על היחס עצמו–
ניתן לבחור )האם על האינדקס להיות מקבץ(:4קו מנחה •אינדקס יחיד שיהיה האינדקס המקבץ של היחס
תנאי בחירה על טווח ערכים רצוי לבצע עם אינדקס מקבץ–
תנאי של התאמה מדויקת כאשר לכמה רשומות אותו ערך במפתח החיפוש–
אינדקס שנועד לפעולות שיבוצעו על האינדקס במקום על היחס עצמו לא –יהיה מקבץ
מסדי נתונים תשס"ג 12
קווים מנחים לבחירת אינדקסים
(:+B )אינדקס המרה לעומת אינדקס 5קו מנחה • טוב לשאילתות עם חיפוש על פי טווח ערכים+Bאינדקס מבוסס עצי – index nested loopאינדקס מבוסס המרה טוב לביצוע צירוף על פי –
joinאינדקס מבוסס המרה טוב לאטריביוט שהפעולות עליו הן חיפוש על –
פי התאמה מדויקת בלבד )בלי חיפוש על פי טווח ערכים(
שינוי היחס שעליו )מחיר תחזוקת האינדקס(:6קו מנחה •מוגדר האינדקס עשוי לגרור שינוי של האינדקס עצמו ולכן
לאינדקס מחיר תחזוקהאם מחיר תחזוקת האינדקס עולה על התועלת מהאינדקס רצוי –
לבטל את האינדקסיש לשים לב שלעיתים גם שאילתות עדכון מרוויחות מקיום אינדקס –
על היחס
מסדי נתונים תשס"ג 13
אינדקס לתנאי בחירה ולצירוף
אילו אינדקסים יש •לבנות על מנת לקבל
ביצוע יעיל של השאילתה?
כיצד תוכנית הביצוע •של השאילתה
משפיעה על ההחלטה?
SELECT E.ename, D.mgrFROM Employees E, Departments DWHERE D.dname=‘Toy’ AND
E.dno=D.dno
SELECT E.ename, D.mgrFROM Employees E, Departments DWHERE D.dname=‘Toy’ AND
E.dno=D.dno
Department
dname=‘toy’Employee
ename,mgr
Index nestedloop join
מסדי נתונים תשס"ג 14
אינדקס לתנאי בחירה ולצירוף
אילו אינדקסים יש •לבנות על מנת לקבל
ביצוע יעיל של השאילתה?
כיצד תוכנית הביצוע •של השאילתה
משפיעה על ההחלטה?
SELECT E.ename, D.mgrFROM Employees E, Departments DWHERE D.dname=‘Toy’ AND E.dno=D.dno AND E.age=25
SELECT E.ename, D.mgrFROM Employees E, Departments DWHERE D.dname=‘Toy’ AND E.dno=D.dno AND E.age=25
Department
dname=‘toy’
Employee
ename,mgr
Block nestedloop join
age=25
מסדי נתונים תשס"ג 15
אינדקס לתנאי טווח ולצירוף
אילו אינדקסים יש •לבנות על מנת לקבל
ביצוע יעיל של השאילתה?
כיצד תוכנית הביצוע •של השאילתה
משפיעה על ההחלטה?
SELECT E.ename, D.dnameFROM Employees E, Departments DWHERE E.sal BETWEEN 3000 AND 5000
AND E.city=‘Afula’ AND E.dno=D.dno
SELECT E.ename, D.dnameFROM Employees E, Departments DWHERE E.sal BETWEEN 3000 AND 5000
AND E.city=‘Afula’ AND E.dno=D.dno
SELECT E.ename, D.dnameFROM Employees E, Departments DWHERE 3000<=E.sal AND E.sal<=5000
AND E.city=‘Afula’ AND E.dno=D.dno
SELECT E.ename, D.dnameFROM Employees E, Departments DWHERE 3000<=E.sal AND E.sal<=5000
AND E.city=‘Afula’ AND E.dno=D.dno יש לבחון את הסלקטיביות
של תנאי הבחירה
מסדי נתונים תשס"ג 16
אינדקס מקבץ
אילו אינדקסים יש •לבנות על מנת לקבל
ביצוע יעיל של השאילתה?
האם יש חשיבות •לשאלה אם האינדקס
הוא מקבץ?כיצד ישפיע הנתון על •
אחוז העובדים שגילם ?40גדול מ-
SELECT E.dnoFROM Employees EWHERE E.age>40
SELECT E.dnoFROM Employees EWHERE E.age>40
האם לבנות אינדקס על האטריביוטcity של Employee?
האם לבנות אינדקס על האטריביוטcity של Employee?
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’
מסדי נתונים תשס"ג 17
השפעה של אינדקס מקבץ
אחוז הרשומות שיש להביא 1000
מחיר
אינדקס מקבץ
אינדקס לא מקבץ
סריקה סדרתית
מסדי נתונים תשס"ג 18
אינדקס על מספר עמודות
אילו אינדקסים יש •לבנות על מנת לקבל
ביצוע יעיל של השאילתה?
האם יש הבדל בין •אינדקס לפי
<age,sal> לאינדקס ?<sal,age>לפי
SELECT E.eidFROM Employees EWHERE E.sal BETWEEN 3000 AND 5000
AND E.age BETWEEN 20 AND 30
SELECT E.eidFROM Employees EWHERE E.sal BETWEEN 3000 AND 5000
AND E.age BETWEEN 20 AND 30
SELECT E.eidFROM Employees EWHERE E.sal BETWEEN 3000 AND 5000
AND E.age=25
SELECT E.eidFROM Employees EWHERE E.sal BETWEEN 3000 AND 5000
AND E.age=25
מסדי נתונים תשס"ג 19
שימוש באינדקס במקום ביחס
נניח שיש אינדקס צפוף • ביחס dnoעל עמודה
Employeeכיצד ניתן להשתמש •
באינדקס על מנת לקבל חישוב יעיל של השאילתה?
האם יש חשיבות לכך •שהאינדקס יהיה צפוף?
האם יש חשיבות לכך •שהאינדקס יהיה מקבץ?
SELECT D.mgrFROM Departments D, Employees EWHERE D.dno=E.dno
SELECT D.mgrFROM Departments D, Employees EWHERE D.dno=E.dno
SELECT E.dno, COUNT(*)FROM Employees EGROUP BY E.dno
SELECT E.dno, COUNT(*)FROM Employees EGROUP BY E.dno
מסדי נתונים תשס"ג 20
שימוש באינדקס במקום ביחס
האם בשאילתות •הבאות ניתן להשתמש
באינדקס כדי לא לגשת ליחס
Employee?אם כן כיצד יראה •
האינדקס?
SELECT D.mgr, E.eidFROM Departments D, Employees EWHERE D.dno=E.dno
SELECT D.mgr, E.eidFROM Departments D, Employees EWHERE D.dno=E.dno
SELECT E.dno, COUNT(*)FROM Employees EWHERE E.sal=10000GROUP BY E.dno
SELECT E.dno, COUNT(*)FROM Employees EWHERE E.sal=10000GROUP BY E.dno
SELECT E.dno, MIN(E.sal)FROM Employees EGROUP BY E.dno
SELECT E.dno, MIN(E.sal)FROM Employees EGROUP BY E.dno
מסדי נתונים תשס"ג 21
כוונון מסד הנתונים
להשגת ביצוע יעיל של מערכת מסד •הנתונים יש לבצע
כוונון אינדקסים–כוונון הסכמה הכללית–כוונון השאילתות–
מסדי נתונים תשס"ג 22
כוונון אינדקסים
תוך כדי עבודה עם מסד הנתונים ניתן לעיתים לגלות כי•שאילתות שנראו חשובות )שכיחות( בעת תכנון המסד אינן –
באמת חשובות שאילתות שלא נראו חשובות )שכיחות( בעת תכנון המסד הן –
חשובות
יש לשנות את קבוצת האינדקסים במערכת על ידי •הוספת אינדקסים וביטול אחרים
פעולות עדכון של יחס מבצעות שינויים באינדקסים על •היחס ולעיתים פוגעות בטיב האינדקס
ניתן לייעל את האינדקס על ידי מחיקתו ויצירתו מחדש•
מסדי נתונים תשס"ג 23
כוונון הסכימה הכללית)מבנה הטבלאות(
הסכימה מאורגנת בעת תכנון מסד הנתונים •ובצוע נורמליזציה של הטבלאות
לעיתים נדרש ארגון מחדש מטעמי יעילות •ביצוע של שאילתות
מסדי נתונים תשס"ג 24
פעולות שניתן לעשות בכוונון הסכימה של המסד
BCNF במקום 3NFלהתפשר על צורת •אם יש יותר מפירוק אחד בצורה הנורמלית הרצויה •
הבחירה בין הפירוקים תעשה משיקולי יעילות ביצועBCNFניתן לפרק סכימה שהיא כבר בצורת •אפשר לחבר סכמות שהופרדו בפירוק או להוסיף •
אטריביוטים לסכימה על מנת לייעל ביצוע שאילתות )אף שיתכן שזה יצור בעיה של כפילויות(
ניתן לפרק יחסים פירוק אופקי )חלוקת היחס לשני •יחסים בעלי סכימה זהה(
ניתן למסך פעולות כוונוןעל ידי שימוש בתצפיות
מסדי נתונים תשס"ג 25
טבלאות דוגמה
Contracts(cid, suplierid, projectid, deptid, partid, qty, value)
Departments(did, budget, annualreport)
Parts(pid, cost)
Projects(jid, mgr)
Suppliers(sid, address)
מסדי נתונים תשס"ג 26
התפשרות על הצורה הנורמלית
CSJDPQVאת טבלת החוזים נייצג כ-•אילוצי תקינות:•
JPCבפרוייקט חלק נרכש בחוזה יחיד: –
DSPמחלקה לא קונה מספק יותר מחלק אחד: –
–Cהוא מפתח ראשי של טבלת החוזים
C, JPמפתחות של טבלת החוזים: •3NF אך תואמת BCNF סותרת DSPהתלות • שהוא משמר תלויות וחסר BCNFפירוק לצורת •
SDP, CSJDQV, CJPאבדן: נניח ששאילתה נפוצה במערכת היא מהו מספר •
, האם P שהוזמן בחוזה P של חלק Qהחלקים נרצה לבצע את הפירוק?
מסדי נתונים תשס"ג 27
איחוד טבלאות (denormalization)
נניח ששאילתה נפוצה במערכת החוזים •היא לבדוק שהערך של חוזה הוא פחות
מהתקציב של המחלקה המבצעת של המחלקות נמצא ביחס של Bהתקציב •
המחלקות ונדרש צירוף טבעי לסכימה של החוזים אך Bניתן להוסיף את •
)באיזו צורה DBאז נקבל את התלות נורמלית יחס החוזים כעת?(
מסדי נתונים תשס"ג 28
בחירת הפירוק
בדוגמה הקודמת בחרנו פירוק לצורת •BCNF: שהוא משמר תלויות וחסר אבדן
– SDP, CSJDQV, CJP
הוא פירוק לצורת פירוק אפשרי אחר•BCNF וחסר אבדן שאינו משמר את
התלויות:– SDP, CSJDQVJPCלא נשמרת התלות –
מסדי נתונים תשס"ג 29
פירוק אנכי
SDP, CSJDQVנניח שנבחר הפירוק: •אין סיבה לפרק יותר מפני שהסכמות בצורת •
BCNFנניח ששאילתות נפוצות הן:•
Sמהם החוזים שקיבל ספק –
Dמהם החוזים שהוציאה מחלקה –
SDP, CS, CD, CJQVניתן להשתמש בפירוק:•מה יקרה אם שאילתה נוספת נפוצה היא מציאת •
הערך הכולל של החוזים שקיבל ספק מסוים
מסדי נתונים תשס"ג 30
פירוק אופקי
נניח שהחוזים מחולקים לשניים:•value>10000חוזים גדולים שבהם –
value<=10000חוזים קטנים שבהם –
ניתן לבצע הפרדה )אופקית( לשני יחסים: •LargeContracts, SmallContracts
ניתן למסך את החלוקה בעזרת הגדרת תצפית:•
Create view Contracts(cid, suppliers, projectid, deptid, partid, qty, value)as ((Select * From LargeContracts) Union (Select * From SmallContracts))
מסדי נתונים תשס"ג 31
כוונון שאילתות
כוונון שאילתות נעשה כאשר מגלים •ששאילתה מחושבת באופן איטי מהמצופה
ניתן לבחון את תוכנית הביצוע של •השאילתה ולבחון האם היא מה שמצופה
ניתן לשפר שאילתה על ידי שכתוב שלה •בצורה שונה
ניתן לשפר ביצוע שאילתה על ידי •הוספת/שינוי אינדקסים רלוונטיים
מסדי נתונים תשס"ג 32
כוונון שאילתות
מניעת מקרים שאינם מטופלים בצורה יעילה •:optimizersעל ידי
NULLתנאי בחירה שכולל –
תנאי בחירה שכוללים –(, sal/100<5, E.age=D.age/2ביטויים חשבוניים )כגון, •( , ’ename like ‘%Aביטויים על מחרוזות )כגון,•ORתנאי •
לגבי ביצוע optimizerנתינת הנחיות ל-•השאילתה
מסדי נתונים תשס"ג 33
לדוגמא
cityנניח שקיים אינדקס על , ageוקיים אינדקס על
?optimizerמה יעשה ה-
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’ OR E.age=25
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’ OR E.age=25
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’UNION ALLSELECT E.dnoFROM Employees EWHERE E.age=25
SELECT E.dnoFROM Employees EWHERE E.city=‘Afula’UNION ALLSELECT E.dnoFROM Employees EWHERE E.age=25
שתי השאילתות שקולות?
מסדי נתונים תשס"ג 34
שאילתה אחת במקום ביצוע בשלבים
SELECT * INTO TempFROM Employees E, Departments DWHERE E.dno=D.dno AND D.mgr=‘Cohen’
SELECT * INTO TempFROM Employees E, Departments DWHERE E.dno=D.dno AND D.mgr=‘Cohen’
SELECT T.dno, AVG(T.sal)FROM Temp TGROUP BY T.dno
SELECT T.dno, AVG(T.sal)FROM Temp TGROUP BY T.dno
SELECT E.dno, AVG(E.sal)FROM Employees E, Departments DWHERE E.dno=D.dno AND D.mgr=‘Cohen’GROUP BY E.dno
SELECT E.dno, AVG(E.sal)FROM Employees E, Departments DWHERE E.dno=D.dno AND D.mgr=‘Cohen’GROUP BY E.dno
בחלק מהמערכות, שאילתות שקולות שאחת
כוללת תת שאילתות והשניהלא כוללת תת שאילתות,
השאילתה בלי התת שאילתותתבוצע בצורה יעילה יותר!
מסדי נתונים תשס"ג 35
השפעה של מקביליות
בעבודה עם ריבוי משתמשים הנעילות גורמות •לעסקאות )טרנזקציות( להמתין לשחרור
מנעולים ומקבלים האטה בביצוע, לכן נעדיףבקשת מנעול הכי מאוחר שניתן–בקשת מנעולי קריאה במקום כתיבה )אם ניתן(–חלוקת עסקאות גדולות למספר עסקאות קטנות–ריכוז של רשומות היחס במקום פיסי אחד ושמירת –
אינדקסים בקרבה ליחסים שלהם( +Bמניעת צווארי בקבוק )לדוגמה שורש של עץ –
במנעולים בעלי גרעיניות משתנהושימוש
מסדי נתונים תשס"ג 36
מנעולים עם גרעיניות מרובהMultiple-Granularity Locks
אם עסקה צריכה לנעול את מרבית הדפים •)בלוקים( של טבלה )יחס(, אז עדיף שהעסקה
תנעל את כל היחס, כדי להקטין את התקורה של הטיפול במנעולים
לעומת זאת, אם עסקה צריכה לנעול רק חלק •קטן מהדפים של טבלה, אז מוטב שהעסקה
תנעל רק דפים אלה, כדי לא למנוע מעסקאות אחרות לפעול במקביל על דפים אחרים של
אותה טבלה
מסדי נתונים תשס"ג 37
באופן דומה
אם עסקה צריכה לנעול את מרבית •הרשומות הנמצאות בדף נתון, אז
מוטב לנעול את כל הדףלעומת זאת, אם עסקה צריכה לנעול •
רק חלק קטן מהרשומות, אז מוטב לנעול רק את הרשומות האלה ולא
את כל הדף
מסדי נתונים תשס"ג 38
לפיכך, הבעיה היא כיצד לנהל נעילות ברמות שונות של
גרעיניותאיך מוודאים שמנעול בלעדי שניתן •
לעסקה אחת על דף מסוים אינו סותר מנעול בלעדי )או משותף( שניתן
לעסקה אחרת על כל הטבלה?
מסדי נתונים תשס"ג 39
אפשר לנעול לפי ההירארכיה הטבעית של מסד הנתונים
המבנה ההירארכי•מסד הנתונים מכיל טבלאות–כל טבלה )יחס( מכילה דפים–כל דף )בלוק( מכיל רשומות–
ניתן לתאר מבנה זה כעץ, כאשר•השורש הוא כל מסד הנתונים–הילדים של צומת בעץ הם כל האיברים מהרמה הנמוכה –
יותר המוכלים בולדוגמה, הילדים של טבלה הם כל הדפים של •
הטבלה
מסדי נתונים תשס"ג 40
X או Sנעילת צומת ע"י מנעול פירושה נעילת כל תת-העץ
מוחזק על צומת X או Sאם מנעול מסוג •בעץ, אז המשמעות היא שמנעול זה מוחזק
על על כל הצאצאים של הצומתלכן, עסקה אינה צריכה לנעול צומת אם •
היא מחזיקה מנעול מאותו הסוג על הורה ( של הצומתancestorאו הורה קדמון )
מסדי נתונים תשס"ג 41
צריך גם מנעולי כוונהIntention Locks
IX מסומן ע"י intention exclusiveמנעול מסוג •, אז פירוש IXאם עסקה נועלת צומת ע"י מנעול •
הדבר שיש לה כוונה לנעול צאצאים של הצומת Xע"י מנעול
IS מסומן ע"י intention sharedמנעול מסוג •, אז פירוש ISאם עסקה נועלת צומת ע"י מנעול •
הדבר שיש לה כוונה לנעול צאצאים של הצומת Sע"י מנעול
מסדי נתונים תשס"ג 42
תאימות בין סוגי המנעולים
כל Sכמו קודם, על צומת יכולים להיות מספר מנעולי • )של עסקה אחרת(Xעוד אין מנעול מסוג
כל עוד אין ISעל צומת יכולים להיות מספר מנעולי • )של עסקה אחרת(Xמנעול מסוג
כל עוד אין IXעל צומת יכולים להיות מספר מנעולי • )של עסקאות אחרות(X או Sמנעולים מסוג
ISלדוגמה, על צומת יכולים להיות מספר מנעולי • בו-זמניתIXומספר מנעולי
בו-זמניתS ומספר מנעולי ISאפשר גם מספר מנעולי •, אז אין אפשרות לאף מנעול נוסףXאם יש מנעול •
מסדי נתונים תשס"ג 43
הפרוטוקול לנעילות רב-גרעיניות
,S, Xעסקה חייבת להתחיל בנעילת השורש ע"י •IX או IS
אם היא S או ISעסקה יכולה לנעול צומת ע"י • על ההורה של הצומת ISמחזיקה
אם היא X או IXעסקה יכולה לנעול צומת ע"י • על ההורה של הצומתIXמחזיקה
, אז כל X או S כשעסקה נועלת צומת ע"י הערה:•הצאצאים של הצומת נעולים גם הם ואין צורך
להמשיך לרדת בעץ כדי לנעול
מסדי נתונים תשס"ג 44
המשך הפרוטוקול
,ISאי אפשר להסיר מנעול מכל סוג שהוא )•IX, S או X מצומת נתון, אלא אם כן אין שום )
מנעולים על הילדים של הצומתכל הנעילות )מכל ארבעת הסוגים( מתנהלות •
לפי הפרוטוקול של נעילות בשתי פאזות:תחילה, עסקה מבצעת רק נעילות–לאחר השחרור הראשון של מנעול )מכל סוג –
שהוא(, עסקה יכולה רק לשחרר מנעולים
מסדי נתונים תשס"ג 45
מדוע התנאי ש
או IS, IX, Sאי אפשר להסיר מנעול מכל סוג שהוא )•X מצומת נתון, אלא אם כן אין שום מנעולים על )
הילדים של הצומת?אם עסקה מסירה את המנעול שלה מהשורש )ואין •
מנעולים אחרים על השורש(, אז כל עסקה אחרת ואז למעשה כל העץ Xיכולה לנעול את השורש ע"י
Xנעול ע"י על X או Sאם העסקה הראשונה עדיין מחזיקה מנעול –
צומת כלשהי בעץ זה סותר את הדרישה שהעסקה האחרת בלעדי על כל העץXמחזיקה מנעול
מסדי נתונים תשס"ג 46
מקרה נפוץ
עסקה רוצה לקרוא יחס במלואו ולשנות •מספר קטן של רשומות השייכות ליחס
העסקה תנעל את הצומת המתאימה לכל •S וע"י IXהיחס ע"י
בהמשך העסקה תנעל צאצאים נוספים •X או IXע"י
מסדי נתונים תשס"ג 47
נכונות
הפרוטוקול של נעילות רב גרעיניות מייצר •רק תזמונים ברי סדרתיות קונפליקטית
506ההוכחה בספר של אולמן, עמוד • קרויים intention locksבספר של אולמן –
warnings
מסדי נתונים תשס"ג 48
הסלמה של גירעוןGranularity Escalation
איך מחליטים מהי הגרעיניות המתאימה •לעסקה נתונה?
אפשר להתחיל עם גרעיניות עדינה •)למשל, נעילה ברמה של רשומות( ולאחר
שמספר המנעולים שהעסקה מבקשת עובר סף מסוים, אז מגדילים את הגרעיניות
לרמה הבאה )למשל, נעילות ברמה של דפים(
מסדי נתונים תשס"ג 49
Oracleכוונון ב-
מסדי נתונים תשס"ג 50
Oracle Query Optimizers
פועל בשתי שיטותoptimizerה-••Rule-based (RBO):
בוחן את מסלולי הביצוע האפשריים ומדרג את –האלטרנטיבות לפי אוסף חוקים
•Cost-based (CBO):משתמש באינפורמציה שיש על המסד )כגון גודל –
הטבלאות( כדי לבחור את מסלול הביצוע הטוב ביותרדורש אנליזה של הטבלאות במסד המתקבלת –
Analayzeמהפעלת פקודת Oracle-משתמש ב rule-basedאם לכל הטבלאות
המשתתפות בשאילתה לא נעשתה להן אנליזה
מסדי נתונים תשס"ג 51
דוגמא, בחירת סדר הגישה Fromלטבלאות המופיעות ב-
•RBO נדרש לבחור את הטבלה שאליה Fromנגשים ראשונה מטבלאות ה-
טבלה שיש לה אינדקס על מפתח ראשי •נבחרת לפני טבלה שאין לה אינדקס ראשי
... חוקים נוספים ...• לא מצליח, בהתבסס על RBOאם •
החוקים, לבחור טבלה מתאימה, הטבלה הימנית ביותר נבחרת
מסדי נתונים תשס"ג 52
RBOעזרה ל-
מסודרות על פי גודלן: Fromהטבלאות יופיעו ב-•הקטנות מימין לטבלאות הגדולות יותר
תנאי הצירוף יופיעו ראשונים בתנאי הצירוף • הוא מלמעלה למטהparsing כי ה-Whereב-
תנאי שמסננים הכי הרבה רשומות יופיעו בסוף •Whereתנאי ה-
( לטבלאות aliasesשימוש בכינויים קצרים )•(From Employees E )לדוגמה, parsingחוסך ב-
מסדי נתונים תשס"ג 53
CBOפעולת
משתמש באינפורמציה על הטבלאות •לקביעת תוכנית הביצוע הטובה ביותר
יוצרת סטטיסטיקות על ANALYZEפעולת •הטבלאות
אם קיימת סטטיסטיקה רק על חלק • משתמש CBOמהטבלאות בשאילתה,
בסטטיסטיקה הקיימת לבצע הערכה של הנתונים החסרים
מסדי נתונים תשס"ג 54
סטטיסטיקה
על טבלאות:•מספר שורות, מספר בלוקים, אורך שורה ממוצע–
על עמודות:•, nullמספר הערכים השונים בעמודה ומספר ערכי –
התפלגות הערכים )היסטוגרמה(
על אינדקסים:•מספר הבלוקים באינדקס שהם עלים, מספר הרמות –
באינדקס, פקטור המעיד באיזו רמה האינדקס מקבץ
על המערכת:•–I/O וביצועי CPUניצולת משאבי מערכת ,
מסדי נתונים תשס"ג 55
Optimizerבחירת אופן פעולת ה-
alter session set optimizer_goal <goal>;
מבין:goalניתן לבחור •–RULE מפעיל :rule-base optimizer
–ALL_ROWS מפעיל :cost-based optimizer עם מטרה לקבל סיום משימה בזמן הטוב ביותר
–FIRST_ROWS מפעיל cost-based optimizer עם מטרה לקבל רשומה ראשונה של תוצאה הכי מהר
–CHOOSE-ה :optimizer בוחר מבין השלוש שתוארו על פי הסטטיסטיקות שקיימות
מסדי נתונים תשס"ג 56
כיצד יודעים מהי תוכנית הביצוע של שאילתה?
explain planניתן להשתמש בפקודה •
set autotrace onניתן להפעיל •
בשני המקרים התוצאה נרשמת בטבלה •PLAN_TABLEבשם
על PLAN_TABLEניתן לייצר את טבלת •ידי קריאה ל-
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
מסדי נתונים תשס"ג 57
explain planset statement_id='sailorstest'for SELECT snameFROM Sailors SWHERE sname='Joe' and sid in (SELECT sid
FROM Reserves WHERE bid=10);
explain plan set statement_id=‘<name>’ for <statement>
מסדי נתונים תשס"ג 58
SELECT lpad(' ',2*Level)||Operation||' '||Options||' '||Object_Name Execution_PathFROM Plan_TableWHERE Statement_Id='sailorstest';
שליפת תוכנית הביצוע Plan_Tableמ-
מסדי נתונים תשס"ג 59
מסדי נתונים תשס"ג 60
פעולות אפשריות וערכיהן
• TABLE ACCESS : FULL, BY ROWID, HASH• SORT: UNIQUE, AGGREGATE, JOIN• NESTED LOOP• MERGE JOIN• FILTER• INDEX: UNIQUE SCAN, RANGE SCAN,
RANGE SCAN DESCENDING• FIRST ROW
מסדי נתונים תשס"ג 61
Analyzeביצוע פעולת
analyze table | index <table-name | index-name> compute statistics | estimate statistics [sample <integer> rows | precent] |
delete statistics;
analyze table Sailors estimate statistics sample 50 precent;
מסדי נתונים תשס"ג 62
optimizerרמזים ל-
שאומרים optimizerניתן להוסיף רמזים ל-•איך לדעת כותב השאילתה כדאי לבצע את
השאילתה*/< hints >/*+רמזים יופיעו בתוך •selectרמזים יופיעו מייד אחרי ה-•
מסדי נתונים תשס"ג 63
דוגמאותSelect /*+ FULL (sailors) */ sidFrom sailorsWhere sname=‘Joe’;
Select /*+ INDEX (sailors) */ sidFrom sailorsWhere sname=‘Joe’;
Select /*+ RULE */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
מסדי נתונים תשס"ג 64
דוגמאותSelect /*+ USE_NL (sailors) */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
Select /*+ USE_MERGE (sailors, reserves) */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;
Select /*+ USE_HASH */ sidFrom sailors S, reserves RWhere S.sid=R.sid AND sname=‘Joe’;