Set ArithAbort, Execution plans, ושיפור ביצועים

יום שישי, דצמבר 8, 2017

תודה מראש לעדי כהן על העזרה בפתרון הבעייה ובכתיבת הפוסטאת ההרצאה על Set ArithAbort שמעתי כבר כמה פעמים: הפרוצדורה רצה לא טוב דרך האפליקציה, רצה טוב ב-SSMS, וכל זה בגלל שהגדרת ברירת המחדל של ArithAbort (שאין לה שום השפעה ישירה על הפרוצדורה) גורמת לכך שהמערכת יוצרת Execution Plan אחד באפליקציה ואחר ב-SSMS (שוב- רק בגלל שכל סביבה נחשבת לשונה בגלל הנ"ל), וכך המערכת שומרת שני Execution Plans שונים, מבזבזת משאבים ומבלבלת את ה-DBA-ים שאינם מבינים מה השתבש. כאמור - שמעתי מספר פעמים, אבל רק השבוע זה קרה לי בפעם הראשונה: יש אפליקציה שרצה, מריצה אחת לכמה דקות פרוצדורה...
אין תגובות

האם פרוצדורה יכולה להתאבד?

יום שישי, פברואר 7, 2014

כנראה שמשעמם לי בחיים אם הגעתי לנושא הרה גורל זה: האם פרוצדורה יכולה לבצע Drop לעצמה?בואו ננסה: Use tempdb;Go Create Proc P AsPrint 'Before:';Print @@ProcID;Print Object_Name(@@ProcID);Drop Proc P;Print 'After:';Print @@ProcID;Print Object_Name(@@ProcID);Go היא אמורה לכתוב את הקוד והשם שלה לפני ההתאבדות ואחריו.נריץ: Exec P; כפי שאפשר לראות היא הדפיסה את הקוד והשם שלה לפני ההתאבדות,אך לאחר מכן- השם לא נמצא בטבלאות המערכת ולכן רק הקוד ששמור במשתנה המערכת הוצג;והכי חשוב- העובדה שהיא נמחקה מהאובייקטים של השרת לא הפריעה למה שכבר רץ להמשיך הלאה באופן תקין.מעבר לעיסוק בזוטות – כשמשנים פרוצדורה תוך כדי זה שהיא רצה – זה לא ישפיע על הריצה הנוכחית שמתבצעת...
תגיות: , ,
אין תגובות