נעילת טבלה על ידי פקודת Select

יום שלישי, ספטמבר 16, 2014

ניתן לנעול טבלה על ידי פקודת Select אם משתמשים ב-TabLockX, אך לא בכך אעסוק.לאחרונה נתקעה ריצה של פרוצדורה המעדכנת טבלה מסויימת, על ידי משתמש שהריץ פקודת Select תמימה מאותה טבלה, ללא שום Hint (כמו ה-TabLockX הנ”ל).כיצד זה יתכן? בואו נראה- ניצור טבלה להדגמה: Use tempdb;Go If Object_ID('T_Messages','U') Is Not Null Drop Table T_Messages;Go Select * Into T_Messages From sys.messages;Go לאחר מכן נריץ את השליפה הבאה שיוצרת מכפלה קרטזית של הטבלה עם עצמה, וכך מבטיחה שריצת ה-Select תרוץ הרבה זמן (לא הייתי מריץ את זה על ה-Prod אך איש הישר בעיניו יעשה): Select *From T_Messages T1Cross Join...
אין תגובות

מידע על נעילות

יום רביעי, אוגוסט 14, 2013

נעילות הן אוייב רשע וחמקמק שיש לתפוס אותו על חם ולהיפרע ממנו: בדיעבד קשה לדעת מי חסם את מי – איזה תהליך עדכן איזו טבלה ומנע מתהליכים אחרים לגשת אליה - ולנקוט בצעדי מנע לעתיד. פנו אלי עם איזו שליפה עתיקת יומין שרצה ב-SQL 2005 ועושה שימוש בטבלאות מערכת כמו master.dbo.sysprocesses שהשתדרגה בגרסת 2000 ל-sys.sysprocesses, בטרם התקדמנו ב-2005 ל-DMV's ו-DMF's למיניהם. השליפה ההיא דווקא עשתה עבודה טובה יחסית ושלפה מטבלאות המערכת את המידע הרלוונטי, אך ראוי לעבור למקורות שנתמכים ושלא צפויים להיעלם בקרוב. המעבר ל- DMV's ו-DNF's אינו פשוט כל כך מכיוון שלא מדובר רק בשינוי שמות, אלא שמידע...
אין תגובות

סוגי נעילות: Shared Lock, Update Lock, Exclusive Lock

יום שישי, יולי 26, 2013

Exclusive Lock – נעילה בזמן עדכון טבלה. העדכון נועל אותה, וכל שאר היישומים אינם יכולים לגשת אליה עד שהעדכון יסתיים. Shared Lock – נעילה לזמן קצר ביותר במהלך ביצוע ה-Select שנועד למצוא אילו שורות לשנות. למשל- שתי פקודות Update נשלחות בו זמנית, שתיהן מפעילות Shared Lock על הטבלה, ומחפשות את השורות הרלוונטיות. כל אחת מהן מונעת מזולתה לעדכן את הטבלה.לא ניתן לעדכן בשלב זה (כשהאחת מחפשת ונועלת- השניה לא יכולה לעדכן), אך כן ניתן לחפש (כשהאחת מחפשת ונועלת- גם השניה יכולה לחפש ולנעול). Update Lock – כאשר שתי פקודות ניגשות לטבלה בו זמנית – שתיהן מפעילות עליה...
אין תגובות