อาการ
สมมติว่าคุณมีตารางที่มีคอลัมน์วัตถุขนาดใหญ่ (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 จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า ตรวจดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012 SP2
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012 SP1
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2008 R2 SP2
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014
- การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2008 SP3
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้ชั่วคราว ให้ใช้วิธีแก้ไขปัญหาชั่วคราวต่อไปนี้:
- ส่งออกแถวทั้งหมดไปยังตารางใหม่ และย้ายแถวเหล่านั้นกลับไป การทําเช่นนี้จะจัดระเบียบข้อมูล LOB ใหม่และปล่อยพื้นที่ที่ไม่ได้ใช้
- ใช้ DBCC SHRINKFILE กับตัวเลือก EMPTYFILE เพื่อย้ายข้อมูลทั้งหมดไปยังไฟล์ข้อมูลที่เพิ่มใหม่ แล้วเอาไฟล์ข้อมูลเก่าออก ซึ่งจะจัดระเบียบข้อมูล LOB ใหม่โดยการปล่อยพื้นที่ที่ไม่ได้ใช้
ข้อมูลเพิ่มเติม
ตัวอย่างต่อไปนี้แสดงพื้นที่ที่ไม่ได้ใช้งานโดยใช้คําสั่ง TSQL sp_spaceused 'table_name' ก่อนและหลังจากที่คุณอัปเดตคอลัมน์ LOB ด้วยข้อมูล LOB ที่มีขนาดเล็กลง:
ก่อนอัปเดต:
| ชื่อ | rows | สงวนไว้ | ข้อมูล | index_size | ไม่ได้ใช้ |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 KB | 261056 KB | 16 KB | 0 KB |
หลังจากที่คุณอัปเดต:
| ชื่อ | rows | สงวนไว้ | ข้อมูล | index_size | ไม่ได้ใช้ |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 KB | 199672 KB | 16 KB | 61384 KB |
สถานะ
Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"