תופעות
שקול את התרחיש הבא:
-
יש לך מסד נתונים של Microsoft SQL Server 2012 הכולל את הALLOW_SNAPSHOT_ISOLATION ואפשרויות READ_COMMITTED_SNAPSHOT זמינות.
-
יש לך לפחות שלוש שאילתות בו שפועלות כנגד אותה טבלה.
-
השאילתות משתמשות ברמז לשאילתה (TABLOCK, UPDLOCK) .
-
כל שאילתה עטופה במשפט TRAN של ' התחלה מפורשת ', אך המשפט COMMIT tran אינו מופעל.
כאשר השאילתה הראשונה מחויבת בתרחיש זה, אחת מהשאילתות האחרות תהפוך לקיפאון. כאשר READ_COMMITTED_SNAPSHOT מופעלת יחד עם העצות של השאילתה TABLOCK ו- UPDLOCK , ההפעלות מקבלות הפעלות IX על הטבלה. הקיפאון מתרחש כאשר שתי ההפעלות הנוכחיות מנסות להמיר את הנעילות התשיעיות ל-X נעילות בו. אם READ_COMMITTED_SNAPSHOT אינו זמין, ההפעלות יקבלו שישה נעילות שאינן מועברות בעת המרה ל-X נעילות. התיקון החם מטפל באופן פעולה זה על-ידי הענקת מנעולים LCK_M_SCH_S במקום מנעולים של IX כאשר READ_COMMITTED_SNAPSHOT משמש עם רמזי TABLOCK ו- UPDLOCK .הערה בעיה זו מתרחשת גם ב-Microsoft SQL Server 2008 R2. תיקון חם עבור SQL Server 2008 R2 ישוחרר בקרוב.
פתרון
הבעיה נפתרה לראשונה בעדכון המצטבר הבא של SQL Server.
עדכון מצטבר 8 עבור SQL Server 2012 SP1 /en-us/help/2917531
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".