อาการ
สมมติว่าคุณมีตารางที่ประกอบด้วยคอลัมน์วัตถุขนาดใหญ่ (LOB) ใน Microsoft SQL Server ๒๐๐๘, SQL Server ๒๐๐๘ R2, SQL Server ๒๐๑๒หรือ SQL Server ๒๐๑๔ เมื่อคุณอัปเดตกคอลัมน์ LOB ที่มีขนาดเล็กกว่าของข้อมูลที่ LOB และพยายามที่จะเพิ่มเนื้อที่ว่างที่ไม่ได้ใช้งานโดยใช้วิธีการต่อไปนี้:
-
DBCC SHRINKDATABASE/DBCC SHRINKFILE
-
เปลี่ยนการจัดระเบียบดัชนีด้วย (LOB_COMPACTION = ON)
ในสถานการณ์นี้ช่องว่างที่ไม่ได้ใช้งานไม่สามารถเรียกคืนได้
การแก้ไข
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสม2สำหรับ SQL Server ๒๐๑๒ SP2 /en-us/help/2983175
การอัปเดตที่สะสม11สำหรับ SQL Server ๒๐๑๒ SP1 /en-us/help/2975396
การอัปเดตที่สะสม13สำหรับ SQL Server ๒๐๐๘ R2 SP2 /en-us/help/2967540
การอัปเดตที่สะสม2สำหรับ SQL Server ๒๐๑๔ /en-us/help/2967546
การอัปเดตที่สะสม17สำหรับ SQL Server ๒๐๐๘ SP3 /en-us/help/2958696
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้ให้ใช้วิธีการแก้ไขปัญหาต่อไปนี้:
-
ส่งออกแถวทั้งหมดไปยังตารางใหม่และย้ายแถวกลับ ซึ่งจะเป็นการ reorganizes ข้อมูลที่ LOB และปล่อยพื้นที่ที่ไม่ได้ใช้งาน
-
ใช้ SHRINKFILE DBCC ด้วย EMPTYFILE ตัวเลือกเพื่อย้ายข้อมูลทั้งหมดไปยังไฟล์ข้อมูลที่เพิ่งเพิ่มเข้ามาแล้วเอาไฟล์ข้อมูลเก่าออก นี่เป็นการ reorganizes ข้อมูลที่ LOB โดยการปล่อยช่องว่างที่ไม่ได้ใช้งาน
ข้อมูลเพิ่มเติม
ตัวอย่างต่อไปนี้จะแสดงให้คุณเห็นพื้นที่ที่ไม่ได้ใช้งานโดยการใช้คำสั่ง TSQL sp_spaceused ' table_name ' ก่อนและหลังจากที่คุณอัปเดตกคอลัมน์ lob ที่มีขนาดเล็กกว่าของข้อมูลที่ Lob: ก่อนที่คุณจะอัปเดต:
ชื่อ |
แถว |
สงวน |
ข้อมูล |
index_size |
ใช้ |
table_name |
๑๐๐๐ |
๒๖๑๐๗๒ KB |
๒๖๑๐๕๖ KB |
16 KB |
0 KB |
หลังจากที่คุณอัปเดต:
ชื่อ |
แถว |
สงวน |
ข้อมูล |
index_size |
ใช้ |
table_name |
๑๐๐๐ |
๒๖๑๐๗๒ KB |
๑๙๙๖๗๒ KB |
16 KB |
๖๑๓๘๔ KB |
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"