none
progress for a query RRS feed

תשובות

  • היי Tetitu,
    הדרך היחידה שאני יכול לחשוב עלייה (ואני מוכרח להודות שהיא לא הדרך הכי אלגנטית בעולם...),  זה פשוט להיעזר ב- sys.dm_exec_sessions לנסות לחשב עוד כמה Pages נשארו ל-SQL Server לקרוא עד לסיום הרצת השאילתה.
    לדוגמא:
    אתה יודע שהשאילתה אמורה לקרוא מיליון Pages, וקצב הקריאה הוא בערך 100K בדקה,  אז אתה יכול לשער שהשאילתה תסיים תוך 10 דקות לערך.
    בבסיס של שיטה זו יש שתי הנחות יסוד שעלולות להיות בעייתיות:

    1. קצב הקריאה הוא קבוע- רק בהנחה שקצב קריאת ה- Pages הוא קבוע נוכל לבצע את החישוב הנ"ל, אבל אנו יודעים שלפעמים קצב הקריאה יכול להשתנות בצורה דיי קיצונית במהלך הריצה (לדוגמא בגלל נעילות...).
    2. גודלו של ה- Result Set- בהנחה שאנו יודעים כמה Pages צריך לקרוא על מנת לבצע את השאילתה, נוכל לחשב כמה זמן בעצם נשאר, אבל אם בכל הרצה מספר השורות שחוזרות הוא שונה לחלוטין, אזי הבסיס לחישוב צריך להשתנות בהתאם.

     זה בגדול הכיוון וככה אני הייתי מנסה להתמודד עם הבעיה שציינת, אני מקווה מאד שהצלחתי להסביר את עצמי כראוי, וגם שהצלחתי לעזור במשהו...
    חקיקת יוסי
    • סומן כתשובה על-ידי tetitu יום שני 17 יוני 2013 06:50
    יום ראשון 16 יוני 2013 18:41
  • קשה מאוד לנהל קצב התקדמות בשאילתות מסיבות רבות כמו למשל שאפילו העיבוד על כל רשומה יכול להיות כל כך שונה כך שלא ניתן להעריך מרשמות שעברנו כבר את הזמן שנשאר בצורה מדוייקת. עם כל זה יש לנו כלים רבים שמייקרוסופט הכינו לנו כמו למשל שימוש ב sys.dm_exec_requests

    השאילתה הבאה היא הדרך הרישמית לבצע ניטור של איזה אחוז מהשאילתה נשאר לבצע:

    SELECT *
    FROM sys.dm_exec_requests

    בטבלה הדינאמית dm_exec_requests יש עמודה בשם percent_complete שאמורה לתת לך את הנתון. אתה יכול לבצע JOIN של השאילתה הזו עם טבלת ה SESSION על מנת לאתר את הרשומה הרלוונטית לשאילתה הנוכחית שלך.

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


    signature

    • נערך על-ידי pituachMVP, Editor יום רביעי 19 יוני 2013 19:54
    • סומן כתשובה על-ידי tetitu יום חמישי 20 יוני 2013 04:05
    יום רביעי 19 יוני 2013 19:50
    מנחה דיון

כל התגובות

  • היי Tetitu,
    הדרך היחידה שאני יכול לחשוב עלייה (ואני מוכרח להודות שהיא לא הדרך הכי אלגנטית בעולם...),  זה פשוט להיעזר ב- sys.dm_exec_sessions לנסות לחשב עוד כמה Pages נשארו ל-SQL Server לקרוא עד לסיום הרצת השאילתה.
    לדוגמא:
    אתה יודע שהשאילתה אמורה לקרוא מיליון Pages, וקצב הקריאה הוא בערך 100K בדקה,  אז אתה יכול לשער שהשאילתה תסיים תוך 10 דקות לערך.
    בבסיס של שיטה זו יש שתי הנחות יסוד שעלולות להיות בעייתיות:

    1. קצב הקריאה הוא קבוע- רק בהנחה שקצב קריאת ה- Pages הוא קבוע נוכל לבצע את החישוב הנ"ל, אבל אנו יודעים שלפעמים קצב הקריאה יכול להשתנות בצורה דיי קיצונית במהלך הריצה (לדוגמא בגלל נעילות...).
    2. גודלו של ה- Result Set- בהנחה שאנו יודעים כמה Pages צריך לקרוא על מנת לבצע את השאילתה, נוכל לחשב כמה זמן בעצם נשאר, אבל אם בכל הרצה מספר השורות שחוזרות הוא שונה לחלוטין, אזי הבסיס לחישוב צריך להשתנות בהתאם.

     זה בגדול הכיוון וככה אני הייתי מנסה להתמודד עם הבעיה שציינת, אני מקווה מאד שהצלחתי להסביר את עצמי כראוי, וגם שהצלחתי לעזור במשהו...
    חקיקת יוסי
    • סומן כתשובה על-ידי tetitu יום שני 17 יוני 2013 06:50
    יום ראשון 16 יוני 2013 18:41
  • יוסי,

    תודה על התשובה זה נראה כמו כיוון.

    אם למשהו יש עוד רעיון  אני אשמח לשמוע.

    יום שני 17 יוני 2013 06:59
  • קשה מאוד לנהל קצב התקדמות בשאילתות מסיבות רבות כמו למשל שאפילו העיבוד על כל רשומה יכול להיות כל כך שונה כך שלא ניתן להעריך מרשמות שעברנו כבר את הזמן שנשאר בצורה מדוייקת. עם כל זה יש לנו כלים רבים שמייקרוסופט הכינו לנו כמו למשל שימוש ב sys.dm_exec_requests

    השאילתה הבאה היא הדרך הרישמית לבצע ניטור של איזה אחוז מהשאילתה נשאר לבצע:

    SELECT *
    FROM sys.dm_exec_requests

    בטבלה הדינאמית dm_exec_requests יש עמודה בשם percent_complete שאמורה לתת לך את הנתון. אתה יכול לבצע JOIN של השאילתה הזו עם טבלת ה SESSION על מנת לאתר את הרשומה הרלוונטית לשאילתה הנוכחית שלך.

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


    signature

    • נערך על-ידי pituachMVP, Editor יום רביעי 19 יוני 2013 19:54
    • סומן כתשובה על-ידי tetitu יום חמישי 20 יוני 2013 04:05
    יום רביעי 19 יוני 2013 19:50
    מנחה דיון
  • יוסי החישוב הזה כבר מבוצע ב dm_exec_requests

    signature

    יום רביעי 19 יוני 2013 21:49
    מנחה דיון
  • היי פיתוח,

    כמוך, גם אני מכיר את עמודת ה- percent_complete, הבעיה היחידה עם עמודה זו שהיא לא רלוונטית עבור המקרה הספציפי הזה, כלומר בפעולת SELECT. עמודה זו מתעדכנת אך ורק במקרים הבאים(מצורף קישור): MSDN_Percent_Complete .

    יוסי

    יום חמישי 20 יוני 2013 13:27
  • אתה לא מכיר אותה כמוני :-)

    לא שמתי לב בכלל שהיא לא עובדת ב SELECT :-) תודה על העדכון. אני לא עובד עם ה DMV הזה כמו שכתבתי מסיבות שגם כשהוא כן עובד ונותן נתון הוא נותן נתון מאוד לא מדוייק. כתבתי על זה פעם בקשר לשמוש ב BACKUP. היתה כאן שאלה כיצד לדעת כמה אחוז מהגיבוי כבר נעשה והסברתי והדגמתי עד כמה זה לא יעיל. הדרך שאני עובד איתה זה בכלל בדיקה ברמת מערכת ההפעלה כפי שהסברתי (שהן לא מתאימות גם כן למקרה של SELECT).


    signature

    יום שישי 21 יוני 2013 04:01
    מנחה דיון
  • מעניין. ב-SQL 2014 יש DMV חדשה שנקראת sys.dm_exec_query_profiles:

    "sys.dm_exec_query_profiles (Transact-SQL) monitors real time query progress while a query is in execution"

    בגרסא שיש לי אני עדיין לא רואה אותה..


    My Blog

    יום שלישי 25 יוני 2013 12:06
  • בדיוק הורדתי את הגרסה החדשה לפני שעה ועדיין לא התקנתי אותה :-)

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

    * גוגל לא מוצא כלום עדיין בחיפוש של dm_exec_query_profiles מה שאומר שזה זמן טוב להתחיל לכתוב בלוגים בנושא ולהיות ראשונים (אבל אין לי זמן/כוח כרגע... שוב אני דוחה לסוף השבוע אולי). תפרט מעט היכן ראית חומר על ה DMV הזה? כיצד הגעת אליו?


    signature

    יום שלישי 25 יוני 2013 12:37
    מנחה דיון
  • שכחתי להוסיף לינק להודעה הקודמת: http://msdn.microsoft.com/en-us/library/bb510411(v=sql.120).aspx

    תחת System Table Enhancements

    יכול להיות שזה רק ב-Compatibility level 120, שעדיין לא Implemented.


    My Blog

    יום שלישי 25 יוני 2013 12:46
  • מעולה!

    ה-View הזה (sys.dm_exec_query_profiles) נותן אינפורמציה כל-כך חשובה לטובת ניטור ומעקב אחרי ביצוע בפועל של שאילתות. הוא נותן אינפורמציה בזמן אמת על כל אופרטור בתוך ה-Execution Plan של שאילתה שרצה כרגע. ככה אפשר לדעת מה העלות האמיתית בפועל של כל אופרטור, ועל מה באמת השאילתה עובדת הכי קשה. אפשר לעשות עם זה המון דברים...

    לדעתי, ה-View הזה הוא תוספת משמעותית מאוד ליכולות הניטור ב-SQL Server. אף אחד לא דיבר עליו יותר מדי עד עכשיו, אבל לדעתי זה אחד החידושים המשמעותיים ב-SQL Server 2014.

    תודה מתן!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום רביעי 26 יוני 2013 05:18
    מנחה דיון