תופעות
נניח שיש לך טבלה המכילה עמודת אובייקט גדול (LOB) ב-Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 או SQL Server 2014. כאשר אתה מעדכן את עמודת LOB בגודל קטן יותר של נתוני LOB ומנסה לדרוש מעצמך את השטח שאינו בשימוש באמצעות השיטות הבאות:
-
DBCC SHRINKDATABASE / DBCC SHRINKFILE
-
לשנות את הסדר של אינדקס מחדש עם (LOB_COMPACTION = ON)
במצב זה, אין אפשרות להחזיר את השטח שאינו בשימוש.
פתרון
הבעיה נפתרה לראשונה בעדכון המצטבר הבא של SQL Server.
עדכון מצטבר 2 עבור SQL Server 2012 SP2 /en-us/help/2983175
עדכון מצטבר 11 עבור SQL Server 2012 SP1 /en-us/help/2975396
עדכון מצטבר 13 עבור SQL Server 2008 R2 SP2 /en-us/help/2967540
עדכון מצטבר 2 עבור SQL Server 2014 /en-us/help/2967546
עדכון מצטבר 17 עבור SQL Server 2008 SP3 /en-us/help/2958696
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
פתרון
כדי לעקוף בעיה זו, השתמש בפתרונות הבאים:
-
יצא את כל השורות לטבלה חדשה והעבר את השורות לאחור. פעולה זו מארגנת מחדש את נתוני ה-LOB ומשחררים את השטח שאינו בשימוש.
-
השתמש ב-DBCC SHRINKFILE עם האפשרות EMPTYFILE כדי להעביר את כל הנתונים לקובץ נתונים חדש שנוסף ולאחר מכן להסיר קובץ נתונים ישן. פעולה זו מארגנת מחדש את נתוני ה-LOB שם על-ידי שחרור השטח שאינו בשימוש.
מידע נוסף
הדוגמה הבאה מציגה את השטח שאינו בשימוש באמצעות הפקודה TSQL sp_spaceused ' table_name ' לפני ואחרי העדכון של עמודת ה-lob בגודל קטן יותר של נתוני LOB: לפני העדכון:
שם |
שורות |
שמורות |
נתונים |
index_size |
נוצל |
table_name |
1000 |
261072 KB |
261056 KB |
16 KB |
0 KB |
לאחר העדכון:
שם |
שורות |
שמורות |
נתונים |
index_size |
נוצל |
table_name |
1000 |
261072 KB |
199672 KB |
16 KB |
61384 KB |
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".