none
OLEDB Wait Type RRS feed

תשובות

  • אהלן איתי

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

    נקודה ראשונה: הקישורים לא מדברים על מקרים ותגובות כל כך לעומק. מתי למעשה קורה לנו שיש שמוש שיכול להוביל להמתנה מסוג זו. linked server מוזכר כדוגמה מפני שהוא מקרה הכי ברור בו אנחנו במפורש מגדירים התחברות למקור נתונים חיצוני. בזריקה מהירה מהראש מקרים נוספים למשל:

    שימוש ב openrowset, שימוש ב bulk insert לפעמים, שימוש ב SSMS עצמו בגרסאות הישנות יותר אולי*, השימוש באפליקציות חיצוניות*, השימוש ב CLR וגישה למקור נתונים חיצוני, וכמובן אפילו השימוש ב DMV-ים שאחרי הכל הם עושים שימוש ב OLEDB או ב SQLCLIENT על מנת להגיע לנתונים... ועוד... 

    אתה לא יכול לטעון שאתם לא עובדים עם DMV למשל :-) ואני בטוח שיש ברשימה כאן ובכלל עוד שימושים ב OLEDB PROVIDER (או ב PROVIDER אחר שמעלה את אותה הודעה של המתנה*) אצלכם במערכת.

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

    בכל מקום שסימנתי כוכבית * אלו נקודות שאני צריך להרחיב בהן וכרגע אין לי זמן. למשל השימוש ב PROVIDER של OLEDB שהוחלף ברוב התוכנות כבר כמה שנים בשימוש ב PROVIDER של SQLCLIENT ועוד... אני אנסה להגיע לזה בהמשך ואולי לכתוב בלוג המשך לקישורים שמסבירים מה זה זמן ההמתנה.

    בינתיים אני מקווה שזה עוזר לתת כיוון לניטור הבעיה אצלכם


    signature

    • נערך על-ידי pituachMVP, Editor יום חמישי 29 אוגוסט 2013 09:07
    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום חמישי 29 אוגוסט 2013 09:06
    מנחה דיון
  • הי,

    אתה יכול לדגום את sys.dm_os_waiting_tasks כל כמה זמן ולחפש Tasks שמחכים על ה-Wait Type הזה. ברגע שתמצא אחד כזה, תוכל לבדוק בדיוק מה הוא עושה ולנסות להבין מה הסיבה שהוא מחכה. בשביל זה תצטרך לעשות Join ל-sys.dm_exec_requests, ובאמצעות ה-sql_handle למצוא את הטקסט של הפקודה. תוכך גם לעשות Join ל-sys.dm_exec_sessions ול-sys.dm_exec_connections, על מנת לקבל פרטים על האפליקציה שמריצה את הפקודה, וכך הלאה...

    בהצלחה!

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

    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום חמישי 29 אוגוסט 2013 08:37
    מנחה דיון
  • הרחבה בקצרה מאוד על ידי דוגמה מעשית :-)

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

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

    2. אפליקציה חיצונית יכולה לעקב את הפעילות של השרת גם מבחינת המתנות מסוגים שונים כמו למשל המתנה בעקבות קריאה הנתונים מהשרת (בעקבות תעבורה נמוכה בין השרת לאפליקציה או עבודה איטית של האפליקציה). למרות שאלו באופן ישיר סוגי המתנה אחרים הרי שהם יכולים לגרור המתנה גם לקריאת נתונים של השרת SQL ממקור חיצוני למשל אם המקור החיצוני תלוי באפליקציה. כך שלעיתים מקבלים שבאפליקציה אחת קריאת הנתונים ממקור חיצוני X מהירה אבל באפליקציה שנייה שמעקבת את המקור של הנתונים נוצרת המתנה מסג זה.


    signature

    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום שישי 30 אוגוסט 2013 18:14
    מנחה דיון

כל התגובות

  • הי איתי,

    יצא לי לפגוש את ה-Wait Type הזה לא מעט. לפעמים זה היה רק "שלום-שלום", ולפעמים ניהלנו שיחות נפש.

    אני חושב שהלינקים שצירפת מסבירים לא רע מתי הוא מופיע ומה אפשר לעשות איתו.

    מה בדיוק אתה מחפש? מה אתה רוצה לדעת?

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

    • סומן כתשובה על-ידי itaigitt יום חמישי 29 אוגוסט 2013 08:12
    • סימון כתשובה בוטל על-ידי itaigitt יום חמישי 29 אוגוסט 2013 08:12
    יום חמישי 29 אוגוסט 2013 07:26
    מנחה דיון
  • היי גיא.

    אני פחות הבנתי ממנו מה בפועל אפשר לעשות.

    הערה: אצלי אין linked server, כך שזה לא המקרה שלי.

    תודה,

    איתי.


    itaigitt, http://copypastenet.blogspot.com

    יום חמישי 29 אוגוסט 2013 08:12
  • הי,

    אתה יכול לדגום את sys.dm_os_waiting_tasks כל כמה זמן ולחפש Tasks שמחכים על ה-Wait Type הזה. ברגע שתמצא אחד כזה, תוכל לבדוק בדיוק מה הוא עושה ולנסות להבין מה הסיבה שהוא מחכה. בשביל זה תצטרך לעשות Join ל-sys.dm_exec_requests, ובאמצעות ה-sql_handle למצוא את הטקסט של הפקודה. תוכך גם לעשות Join ל-sys.dm_exec_sessions ול-sys.dm_exec_connections, על מנת לקבל פרטים על האפליקציה שמריצה את הפקודה, וכך הלאה...

    בהצלחה!

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

    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום חמישי 29 אוגוסט 2013 08:37
    מנחה דיון
  • אהלן איתי

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

    נקודה ראשונה: הקישורים לא מדברים על מקרים ותגובות כל כך לעומק. מתי למעשה קורה לנו שיש שמוש שיכול להוביל להמתנה מסוג זו. linked server מוזכר כדוגמה מפני שהוא מקרה הכי ברור בו אנחנו במפורש מגדירים התחברות למקור נתונים חיצוני. בזריקה מהירה מהראש מקרים נוספים למשל:

    שימוש ב openrowset, שימוש ב bulk insert לפעמים, שימוש ב SSMS עצמו בגרסאות הישנות יותר אולי*, השימוש באפליקציות חיצוניות*, השימוש ב CLR וגישה למקור נתונים חיצוני, וכמובן אפילו השימוש ב DMV-ים שאחרי הכל הם עושים שימוש ב OLEDB או ב SQLCLIENT על מנת להגיע לנתונים... ועוד... 

    אתה לא יכול לטעון שאתם לא עובדים עם DMV למשל :-) ואני בטוח שיש ברשימה כאן ובכלל עוד שימושים ב OLEDB PROVIDER (או ב PROVIDER אחר שמעלה את אותה הודעה של המתנה*) אצלכם במערכת.

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

    בכל מקום שסימנתי כוכבית * אלו נקודות שאני צריך להרחיב בהן וכרגע אין לי זמן. למשל השימוש ב PROVIDER של OLEDB שהוחלף ברוב התוכנות כבר כמה שנים בשימוש ב PROVIDER של SQLCLIENT ועוד... אני אנסה להגיע לזה בהמשך ואולי לכתוב בלוג המשך לקישורים שמסבירים מה זה זמן ההמתנה.

    בינתיים אני מקווה שזה עוזר לתת כיוון לניטור הבעיה אצלכם


    signature

    • נערך על-ידי pituachMVP, Editor יום חמישי 29 אוגוסט 2013 09:07
    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום חמישי 29 אוגוסט 2013 09:06
    מנחה דיון
  • תודה!

    האם תוכל להרחיב טיפה מה הכוונה בדיוק ב"אפליקציות חיצוניות"?


    itaigitt, http://copypastenet.blogspot.com

    יום חמישי 29 אוגוסט 2013 11:35
  • הרחבה בקצרה מאוד על ידי דוגמה מעשית :-)

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

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

    2. אפליקציה חיצונית יכולה לעקב את הפעילות של השרת גם מבחינת המתנות מסוגים שונים כמו למשל המתנה בעקבות קריאה הנתונים מהשרת (בעקבות תעבורה נמוכה בין השרת לאפליקציה או עבודה איטית של האפליקציה). למרות שאלו באופן ישיר סוגי המתנה אחרים הרי שהם יכולים לגרור המתנה גם לקריאת נתונים של השרת SQL ממקור חיצוני למשל אם המקור החיצוני תלוי באפליקציה. כך שלעיתים מקבלים שבאפליקציה אחת קריאת הנתונים ממקור חיצוני X מהירה אבל באפליקציה שנייה שמעקבת את המקור של הנתונים נוצרת המתנה מסג זה.


    signature

    • סומן כתשובה על-ידי itaigitt יום ראשון 01 ספטמבר 2013 05:53
    יום שישי 30 אוגוסט 2013 18:14
    מנחה דיון
  • תודה! :-)

    itaigitt, http://copypastenet.blogspot.com

    יום ראשון 01 ספטמבר 2013 05:54