ความรุนแรงที่ 17 บ่งชี้ว่า SQL Server หมดทรัพยากรที่จำเป็น โดยทั่วไปคุณจะเห็นสิ่งนี้เมื่อฐานข้อมูลไม่มีที่ว่าง ในกรณีนี้ดูเหมือนว่ามีการใช้งาน tempdb สำหรับการอ่านแถวเวอร์ชันการแยกสแน็ปช็อตที่กำหนดไว้สำหรับเคียวรีที่จำเป็นในการรั่วไหลไปที่ tempdb
นี่อาจเป็นเรื่องปกติถ้า tempdb มีขนาดสูงสุดที่ จำกัด และมีการพยายามสืบค้นที่เป็นลายลักษณ์อักษรที่ไม่ดีเช่นทำการข้ามขนาดใหญ่มาก
คุณสามารถใช้แบบสอบถามนี้เพื่อดูขนาดปัจจุบันของรุ่นเก็บใน tempdb:
SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';
Technet มีบทความที่น่าสนใจเกี่ยวกับการใช้ที่เก็บเวอร์ชันที่https://technet.microsoft.com/en-us/library/cc966545.aspx#EDAA
หน้า MSDN นี้กล่าวถึงข้อผิดพลาด 3967:
เมื่อ tempdb ไม่มีที่ว่างโปรแกรมฐานข้อมูลบังคับให้ที่เก็บรุ่นย่อขนาด ในระหว่างกระบวนการย่อขนาดธุรกรรมที่ใช้งานยาวนานที่สุดซึ่งยังไม่ได้สร้างเวอร์ชันแถวจะถูกทำเครื่องหมายเป็นเหยื่อ ข้อความ 3967 ถูกสร้างขึ้นในบันทึกข้อผิดพลาดสำหรับแต่ละธุรกรรมของเหยื่อ หากธุรกรรมถูกทำเครื่องหมายว่าเป็นเหยื่อแล้วจะไม่สามารถอ่านเวอร์ชันของแถวในที่เก็บเวอร์ชันได้อีกต่อไป เมื่อพยายามอ่านเวอร์ชันแถวข้อความ 3966 จะถูกสร้างขึ้นและธุรกรรมถูกย้อนกลับ หากกระบวนการย่อขนาดสำเร็จจะมีพื้นที่ว่างใน tempdb
ไม่มีหน้าใดที่ฉันเชื่อมโยงข้างต้นมีคำแนะนำอย่างชัดเจนเกี่ยวกับขนาดสูงสุดของรุ่นที่เก็บใน tempdb ซึ่งทำให้ฉันเชื่อว่าข้อ จำกัด เพียงอย่างเดียวคือขนาดที่กำหนดค่าสูงสุดของ tempdb เองลบด้วยพื้นที่ใดก็ตามที่ใช้ใน tempdb สำหรับ วัตถุอื่น ๆ