Bước nhảy giá trị cột MASSIVE Identity trong SQL Server 2014
Vì vậy, ở giữa quá trình mã hóa và thử nghiệm cơ bản, chúng tôi đã thấy một bước nhảy vọt không theo khuôn mẫu về giá trị Identity cho nhiều bảng. Chúng tôi không biết về bất kỳ lỗi máy chủ nào hoặc hoạt động hàng loạt đã cố gắng, nhưng các DBA đang xem xét nhật ký.
Khoảng trống không phải là 1.000 hoặc 10.000 điển hình được thấy khi máy chủ khởi động lại và như vậy.
Khoảng cách cho Application_NOlà 10.410.345 cho một bảng có 2.320 hàng
Transaction_Payment_NO tăng đáng kinh ngạc 1.712.149.313 cho một bảng có 685 bản ghi.
Bất kỳ ý tưởng nào về điều gì có thể gây ra những bước nhảy lớn và dường như tùy tiện như vậy?
Trả lời
Một số thủ phạm có thể có:
- quá trình thử nghiệm tạo ra nhiều hàng trong một giao dịch và sau đó quay trở lại giao dịch
Đây có vẻ là lý do có thể xảy ra nhất, như bạn đã đề cập rằng bạn hiện đang thực hiện thử nghiệm. Có lẽ có một số thử nghiệm tự động đang được chạy để thực hiện các thay đổi đối với các bảng đó, xác minh kết quả và sau đó quay lại các thay đổi.
Giá trị nhận dạng không được sử dụng lại sau khi giao dịch đã được khôi phục, đó là nguyên nhân khiến bạn thấy khoảng trống lớn trong trường hợp này.
- Ai đó đã sử dụng
RESEEDlệnh
Bạn có thể thay đổi thủ công giá trị "danh tính tiếp theo" hiện tại bằng lệnh này:
DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);
Điều này có vẻ ít xảy ra hơn, bởi vì bạn hoặc một trong các quản trị viên sẽ phải cố gắng hết sức để làm điều đó. Tương tự ...
- Ai đó đã chèn các giá trị đó theo cách thủ công
Bạn có thể chèn bất kỳ thứ gì bạn thích vào một IDENTITYcột bằng cách chạy câu lệnh sau:
SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
- Lỗi và khởi động lại
Bạn đã đề cập đến vấn đề này trong câu hỏi, nhưng chỉ để hoàn thiện - SQL Server lưu trữ các giá trị nhận dạng để cải thiện hiệu suất. Nhưng các giá trị nhận dạng được cấp phát trước đó có thể bị mất nếu dịch vụ khởi động lại hoặc xảy ra chuyển đổi dự phòng AG. Tuy nhiên, điều này dẫn đến nhiều khoảng trống có thể dự đoán được (10.000 trên các phiên bản SQL Server hiện đại).