ค่าคอลัมน์ MASSIVE Identity กระโดดใน SQL Server 2014
ดังนั้นในช่วงกลางของการเข้ารหัสและการทดสอบขั้นพื้นฐานเราจึงเห็นค่า Identity ที่ไม่มีรูปแบบเพิ่มขึ้นอย่างมากสำหรับหลาย ๆ ตาราง เราไม่ทราบถึงเซิร์ฟเวอร์ล่มหรือพยายามดำเนินการจำนวนมาก แต่ DBA กำลังตรวจสอบบันทึก
ช่องว่างไม่ใช่ช่องว่างทั่วไป 1,000 หรือ 10,000 ที่เห็นเมื่อเซิร์ฟเวอร์รีสตาร์ทและเช่นนั้น
ช่องว่างสำหรับApplication_NO
คือ 10,410,345 สำหรับตารางที่มี 2,320 แถว
Transaction_Payment_NO
เพิ่มขึ้นอย่างน่าอัศจรรย์ 1,712,149,313 สำหรับตารางที่มีสถิติ 685 รายการ
ความคิดใด ๆ เกี่ยวกับสิ่งที่อาจทำให้เกิดการกระโดดขนาดใหญ่และดูเหมือนจะเป็นไปโดยพลการ?

คำตอบ
ผู้กระทำผิดที่เป็นไปได้:
- ขั้นตอนการทดสอบจะสร้างแถวจำนวนมากในธุรกรรมจากนั้นย้อนกลับธุรกรรม
นี่เป็นสาเหตุที่เป็นไปได้มากที่สุดตามที่คุณกล่าวว่าคุณกำลังทำการทดสอบ บางทีอาจมีการเรียกใช้การทดสอบอัตโนมัติซึ่งทำการเปลี่ยนแปลงกับตารางเหล่านั้นตรวจสอบผลลัพธ์แล้วย้อนกลับการเปลี่ยนแปลง
ค่าข้อมูลประจำตัวจะไม่ถูกนำมาใช้ซ้ำหลังจากที่มีการย้อนธุรกรรมซึ่งเป็นสาเหตุที่ทำให้คุณเห็นช่องว่างขนาดใหญ่ในสถานการณ์นี้
- มีคนใช้
RESEED
คำสั่ง
คุณสามารถเปลี่ยนค่า "เอกลักษณ์ต่อไป" ปัจจุบันด้วยตนเองได้ด้วยคำสั่งนี้:
DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);
สิ่งนี้ดูเหมือนจะมีโอกาสน้อยกว่าเนื่องจากคุณหรือผู้ดูแลระบบคนใดคนหนึ่งจะต้องออกนอกเส้นทางที่จะทำ ในทำนองเดียวกัน ...
- มีคนแทรกค่าเหล่านั้นด้วยตนเอง
คุณสามารถแทรกสิ่งที่คุณต้องการลงในIDENTITY
คอลัมน์โดยเรียกใช้คำสั่งนี้ก่อน:
SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
- ความล้มเหลวและเริ่มต้นใหม่
คุณได้กล่าวถึงสิ่งนี้ในคำถาม แต่เพียงเพื่อความสมบูรณ์ - SQL Server จะเก็บค่าข้อมูลประจำตัวเพื่อปรับปรุงประสิทธิภาพ แต่ค่าข้อมูลประจำตัวที่จัดสรรไว้ล่วงหน้าเหล่านั้นอาจสูญหายไปได้หากบริการรีสตาร์ทหรือเกิดข้อผิดพลาด AG สิ่งนี้นำไปสู่ช่องว่างที่คาดเดาได้มากขึ้นแม้ว่า (10,000 ใน SQL Server เวอร์ชันที่ทันสมัย)