PracticU

מבוא Execution Plan

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › מבוא Execution Plan
מילון מושגים:
אינדקס - מבנה במסד נתונים שמאיץ חיפוש ושליפה. גם מספר המציין מיקום של איבר במערך.
DELETE - פקודת SQL למחיקת שורות מטבלה. גם שיטת HTTP לבקשת מחיקה של משאב בשרת.
תחביר - אוסף הכללים של שפת תכנות הקובעים כיצד לכתוב קוד תקין. הפרתם גורמת לשגיאת תחביר.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
מפתח ראשי - עמודה או צירוף עמודות שמזהים באופן ייחודי כל שורה בטבלת מסד נתונים.

מבוא Execution Plan
השיעור פותח את הנושא של Execution Plan, תוכנית העבודה שהדאטאבייס בונה כדי להביא נתונים. הוא מסביר מתי התוכנית נבנית, איך קוראים אותה, ואיך הסלקטיביות קובעת אם הדאטאבייס ישתמש באינדקס.
מתי התוכנית נבנית
Execution Plan היא תוכנית הפעולה שבה הדאטאבייס משתמש כדי להביא נתונים. היא נבנית בעיקר בפקודות SELECT, וגם ב-INSERT...SELECT ובפקודות UPDATE ו-DELETE שיש בהן WHERE. התהליך עובר שלושה שלבים:
1. Parsing: בדיקת הסינטקס, האובייקטים, שמות העמודות וההרשאות.
2. Query optimization: הדאטאבייס בוחר את הדרך היעילה ביותר להביא את הנתונים.
3. Execution: הביצוע בפועל, שבו מביאים את הנתונים מהטבלה.
השוואת שאילתות
1. Estimated ו-Actual: Ctrl+L מציג את התוכנית המשוערת של שתי שאילתות זו מול זו. Include Actual Execution Plan מריץ את השאילתה ומציג את מה שבפועל התבצע.
2. DISTINCT מול רגיל: השאילתה עם DISTINCT נשאה 82% מהעלות, והשאילתה בלי DISTINCT 18%, ולכן השאילתה השנייה עדיפה.
3. קריאת התוכנית: פועלים מלמטה למעלה ומימין לשמאל. עובי החץ בין הרכיבים מסמן כמה מידע עובר ביניהם.
4. Clustered Index Scan: בשתי השאילתות מתבצעת סריקה מלאה של הטבלה דרך האינדקס המקובץ (ה-Primary Key).
אינדקס וסלקטיביות
השיעור בודק את העמודה State Province ID בטבלה Person.Address של AdventureWorks2008, עמודה שאינה מאונדקסת. הערך 32 מחזיר שורה אחת מתוך כ-19,000, ולכן הדאטאבייס משתמש באינדקס, מבצע Key Lookup ומחבר. הערך 9 מחזיר יותר מ-4,500 שורות, כלומר מעל 20%, ולכן הדאטאבייס בוחר סריקה מלאה של הטבלה. ככל שהסלקטיביות גבוהה יותר, כלומר מעט שורות מוחזרות, הדאטאבייס נוטה יותר להשתמש באינדקס.
אחרי השיעור אפשר להשוות שתי שאילתות בעזרת התוכנית ולהבין למה הדאטאבייס מתעלם מאינדקס מסוים.
השיעור הבא בקורס: איך מתבצע JOIN בפועל - חלק 1

פרקי ההרצאה: מבוא Execution Plan

  1. 00:00

    מהו Execution Plan ומתי הוא נוצר

  2. 02:22

    שלבי הפארסינג וקומפילציית השאילתה

  3. 03:17

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

  4. 04:33

    השוואת Select Distinct מול Select רגיל

  5. 05:07

    הפעלת Estimated Execution Plan בכפתורים

  6. 06:37

    השוואת עלויות בין שתי השאילתות

  7. 07:28

    רכיבי תוכנית העבודה ו-Clustered Index Scan

תמלול ההרצאה: מבוא Execution Plan

הטקסט המלא של הדקות הראשונות בהרצאה «מבוא Execution Plan» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    שלום לכולם, שיעורנו היום פותח צוהר לאחד הנושאים המרתקים ביותר בנושא של SQL. הוא הנושא אשר מבדל בין תוכניתן המתחיל לתוכניתן המתקדמת בעל ניסיון. הנושא הזה, אנחנו נקרא לו Execution Plan.

  2. 00:17

    מהו Execution Plan? כיצד אנחנו מתמודדים איתו? כיצד אנחנו מפיקים ממנו מידע ומפיקים ממנו את המרב? את זאת נראה בשיעור הקרוב ובשיעור שלאחר מכן.

  3. 00:28

    Execution Plan בתור הגדרה זוהי תוכנית עבודה, תוכנית הפעולה בה משתמש הדאטאבס על מנת להביא את הנתונים.

  4. 00:38

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

  5. 00:50

    מתי מתבצעת תוכנית הפעולה הזאת? אז ראשית כל היא בוודאי מתבצעת כאשר אנחנו שולפים פקודת Select לתוך הדאטאבס. אנחנו מבצעים פקודת Fetching כפקודה של קווירי הבאת הנתונים.

  6. 01:01

    דאטאבייס יושב ומנתח מהי הדרך האופטימלית מבחינת ביצועים ומבחינת שימוש במושבים הקיימים על מנת להביא את הנתונים בצורה היעילה והנכונה ביותר. זה קורה מפקודת סלקט, זה כמובן גם קורה מפקודת אינסרט אבל לא באינסרט פשוט שבהם אנחנו נותנים ערכים values סקלאריים ערכים חד חד ערכיים לתוך הטבלה

  7. 01:25

    אלא כאשר אנחנו משתמשים כמובן בסאב קוויריז תת שאילתא כחלק נקודת הסלקט משתמשים ב-insert as Select, כלומר משתמשים בפקודת סלקט שהפלט שלה מתקבל כ-insert לתוך הטבלה.

  8. 01:39

    מקום נוסף שבו אנחנו משתמשים גם בפקודת EML בחלק של ה-update ו-delete בחלק של ה-well-close, נכון? בעוד שה-well-close הוא אופציונלי עבור פקודות update ו-delete, עבור insert הוא בכלל לא רלוונטי, אולם ברגע שאנחנו רושמים update ו-insert עם well-close, מתבצעת בעצם שליפה מול

  9. 02:02

    הדאטאבייס על מנת לקבל את האוכלוסייה הנכונה, אותה אוכלוסייה שעונה על התנאים הבוליאנים המצוינים בחלק של ה-World Close. כל זאת מביא אותנו למסקנה שבעצם תהליך כתיבה של שאילתא, אחת מני שלושת האפשרויות שציינו Select, Insert או Update ו-Delete, מציגה בפנינו מספר

  10. 02:24

    שלבים אותם עובר הדאטאבייס, החל מהרגע שבו סיימנו לכתוב את השאילתא ועד הרגע שבו אנחנו מקבלים אותה. תחילה קודם כל מתבצע השלב הראשון פארסינג של השאילתה ניתוח וחלוקה של חלקים של השאילתה שאותה כתבנו אוקיי חילקתי אותה ברגע שאני מחלק אותה אז עכשיו אנחנו מבדקים האם היא נכתבה נכון query compilation האם כתבנו אותה בצורה

  11. 02:51

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

  12. 03:11

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

  13. 03:23

    השלב הבא הוא השלב המעניין אותנו, כאן נכנסת תוכנית הפעולה לעבודה ולמקרה query optimization. אנחנו לוקחים את השאילתה, הדאטאבס, בבייגראונד, מאחורה, ברקע לוקח את השאילתה ומטייב אותה נכון ומפרק אותה לחלקים על מנת שנוכל להביא את המידע בצורה האופטימלית.

  14. 03:44

    כאן כבר נעשית בחירה של תוכנית הפעולה, בחירה של ה-execution plan, תוכנית של הבאת הנתונים מתוך הדאטאבס. בשלב הזה זה השלב החכם, זה השלב שבו אנחנו רוצים באמת שיהיה לנו אלגוריתם הכי הכי טוב בדאטאבס שלנו, שידע להביא לנו את הנתונים בצורה האופטימלית ביותר, המהירה ביותר,

  15. 04:04

    על ידי חיסכון במשאבים היעיל ביותר. לאחר שגמרנו את השלב הזה, שאותו שלב הוא עניינו של השיעור שלפנינו, מגיע כבר השלב הטכני, השלב של ה-Fatch, השלב של ה-Query Execution, שלב שבו אנחנו בעצם הולכים ומביאים את הנתונים עצמם מתוך הדאטאבס.

  16. 04:27

    בואו בתור תרגיל פשוט נראה כיצד שתי שאילתות שימוש ב-execution plan יכול לתת לנו תעדוף של שאילתה אחת על פני שאילתה קודמת. בואו נרשום תחילה שאילתת סלקט פשוטה מתוך טבלת employees.

  17. 04:42

    Select Distinct City from Employees אנחנו רוצים לשלוף את שמות הערים מתוך טבלת העובדים שלפנינו. אנחנו רוצים לעמת את השאילתה הזאת מול אותה שאילתה בדיוק רק ללא החלק של ה-Distinct.

  18. 04:58

    רקט סייטי פרום אימפלואיז ושתי השאילתות מוצגות לפנינו. שתי השאילתות הללו אנחנו רוצים כרגע לנתח מה עדיף מבחינתם ואנחנו בעצם כל מה שאנחנו צריכים לעשות כאן זה להשתמש בכפתורים.

  19. 05:17

    יש לנו כאן בכפתורים Display Estimated Execution Plan על מנת להציג מידע משוער כיצד תיראה תוכנית העבודה תוכנית הפעולה של הבאת הנתונים.

  20. 05:29

    יש לאפשרות גם דרך התפריט query, display estimated execution plan וכאן נפתחת לי כבר אפשרות שלישית ctrl+l שזו האפשרות המועדפת מבחינתי.

  21. 05:39

    זו האפשרות שבה אנחנו מסמנים שתי שאילתות, כותבים ctrl+l על מנת לקבל את תוכנית העבודה של זו מול זו על מנת לבצע תיעדוף של שאילתה אחת על פני רעותה. דיברנו על estimated, מה ההערכה של תוכנית העבודה, יש לנו אפשרות לא רק לעשות estimated אלא שתי כפתורים ימינה אנחנו מקבלים

  22. 06:01

    Include Actual Execution Plan בשלב הזה של Include Actual Execution Plan הדאטאבס הולך ומביא את הנתונים עצמם ומציג לנו מהי הדרך שבסופו של דבר התבצעה ובסופו של דבר קיים.

  23. 06:18

    וכרגע לא מעניין אותנו, אנחנו לא רוצים את ה... יש כאן מידע נוסף שנשפך לנו, אנחנו נסתפק ב-Estimated ולכן אנחנו לוחצים על Control-L.

  24. 06:27

    בהצלחה על Control-L אנחנו פותחים כאן את הפאנל של התוצאות ומקבלים את שתי השאילתות זו מול זו מעומתות אחת אל מול רעותה. מידע ראשון שמעניין אותנו והוא כבר המידע שאני אוהב להסתכל עליו כאשר אני מאמץ שתי שאילתות זה האחוזים.

  25. 06:46

    הדאטה בס נותן לנו מבחינת עלויות כיצד עלה לו מהי העלות של שאילתה אחת לעומת חברתה וכבר כאן אנחנו מקבלים שיפור ויעילות מדהימה של 82% משאבים מהזמן הושקעו בשאילתה הראשונה שאילתת הדיסטינק לעומת חברתה שווה רק 18% מהזמן אנחנו יודעים להסביר זאת למה כיוון שבחלק הראשון השתמשנו בסורטינג השתמשנו בחלק של הדיסטינק

  26. 07:16

    אבל זה עדיין מעניין לראות את ההפרשים מבחינת שיפור הביצועים בין שתי השאילתות הללו. בנוסף לזה אנחנו כבר מתחילים לרדת כאן לעומק כשאנחנו מקבלים את הרכיבים המרכיבים את תוכנית העבודה.

  27. 07:34

    הרכיבים הללו כאשר יש ביניהם חץ הם המסמנים לנו מהם תתי השלבים שהדאטאבס עבר מהרגע שביצעתי כתיבת השאילתא, מצאתי F5 מתחילת תוכנית העבודה ועד שהובאו הנתונים בסופו של דבר למשתמש.

  28. 07:56

    אנחנו רואים שבשני התוכניות השתמשנו כאן ב-clustered index scan, סריקה של האינדקס שהוא סקנד האמת שזה לא ממש שימוש בתוך האינדקס אלא זה שימוש בתוך ה-primary key שהוא בעצם כאינדקס מאונדקס מכיוון שכתבנו בשתי השאילתות הללו

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: עבודה עם קבצי XML ישירות מ-SQL

ההרצאה הבאה: איך מתבצע JOIN בפועל - חלק 1

הרצאות קשורות מקורסים אחרים

  • Terraform Plan
  • חולשת DVWA Command Execution
  • תוכנית בדיקה - Test Plan

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI