Deadlock by insert one row

July 18, 2016

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

כאשר ביצע העברת גרסה שכללה שינוי לאינדקסים. (הוספת 2-3 עמודות לinclude ל-2 אינדקסים). הלקוח תהה האם הוספת עמודות נוספות לinclude יכולות לגרום לתופעה של המון Deadlocks בגלל גודל הטבלה(כ25 מיליון רשומות)?

על מסד הנתונים קיים לנו בשגרה איסוף נתונים לגבי Deadlocks (ע"פ מאמר שפרסמנו בעבר)

שלפנו את ה - Deadlock Graph –

 ניתן לראות כמה נתונים שיכולים לעזור לנו לפענח את המקרה:

  1. 2 התהליכים מבצעים את אותו הקוד – הכנסה של רשומה חדשה לטבלה  [Schema].[Table_X] ע"י Entity framework. הכנסה לטבלה ושליפה מידית למסך בטרנזקיה.

  2. תהליך א' ביקש סוג נעילה X (מתוך Books On Line)

 

3. תהליך ב ביקש וקיבל נעילה מסוג IX

 4. ניתן לראות שהנעילה היא לא על שורה כמו שמצופה אלא על הנתון –

objectlock lockPartition="26" objid="1450157815"

הטבלה אינה טבלה בעלת מספר Partition- ים אבל נתפס שיש נעילת Partition שונה מ0.

 

5. האם היה שינוי נוסף שנכנס באותה גרסה? הלקוח ענה שלא.

6. ביקשתי לראות את מה הסקריפט שהורץ בפועל.

 

כאשר מביטים בסריפיט הוא נראה ככל סקירפט רגיל, אך אם נביט טוב נשים לב שנבחרו 2 אופציות ששונו ע"י המפתח-

  1. ALLOW_ROW_LOCKS. המשמעות – אל תיזום נעילת שורה על האינדקס – תתקבל הנעילה הבאה בתור – Page.

  2. ALLOW_PAGE_LOCKS המשמעות – אל תיזום נעילת דף על האינדקס – תתקבל הנעילה הבאה בתור – OBJECT.

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

ולכן החלטנו לבצע שאילתה למציאת בעיות נוספות מאותו הסוג –

 השאילה משנה רק את 2 סוגי המאפיינים בחזרה למצב ברירת המחדל שלהם – פעיל.

כאשר יישרנו קו, נעלמו הDeadlocks באותה הקלות שבה הן הופיעו...

 

 

 

 

 

 

 

 

 

 

 

לסיכום:

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

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

 

 

תוייג כ"לגזור ולשמור"

 

 

 

 

 

 

 

 

 

 

Please reload

Featured Posts

I'm busy working on my blog posts. Watch this space!

Please reload

Recent Posts

October 31, 2017

October 29, 2017

Please reload

Archive
Please reload

Search By Tags