SQL Server 2014의 MASSIVE ID 열 값 점프

Aug 19 2020

따라서 기본 코딩 및 테스트 중간에 여러 테이블에 대한 Identity 값이 패턴 화되지 않은 엄청난 점프를 보았습니다. 서버 오류나 대량 작업 시도를 알지 못하지만 DBA는 로그를 조사하고 있습니다.

격차는 서버 재시작 등으로 나타나는 일반적인 1,000 또는 10,000이 아닙니다.

Application_NO2,320 행이있는 테이블 의 경우 간격 은 10,410,345입니다.

Transaction_Payment_NO 685 개의 레코드가있는 테이블에서 놀라운 1,712,149,313을 기록했습니다.

그렇게 크고 임의적으로 보이는 점프를 일으키는 원인에 대한 아이디어가 있습니까?

답변

5 JoshDarnell Aug 19 2020 at 01:06

몇 가지 가능한 원인 :

  1. 테스트 프로세스는 트랜잭션에 많은 행을 생성 한 다음 트랜잭션을 롤백합니다.

이것은 현재 테스트 중이라고 언급했듯이 가장 가능성이 높은 이유처럼 보입니다. 해당 테이블을 변경하고 결과를 확인한 다음 변경 사항을 롤백하는 자동화 된 테스트가 실행되고있을 수 있습니다.

트랜잭션이 롤백 된 후에는 ID 값이 재사용되지 않으므로이 시나리오에서 큰 차이가 발생합니다.

  1. 누군가가 RESEED명령을 사용했습니다.

다음 명령을 사용하여 현재 "다음 ID"값을 수동으로 변경할 수 있습니다.

DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);

이것은 당신이나 관리자 중 한 명이 작업을 수행해야하기 때문에 가능성이 적어 보입니다. 비슷하게...

  1. 누군가 수동으로 해당 값을 삽입했습니다.

IDENTITY먼저 다음 명령문을 실행 하여 원하는 것을 열에 삽입 할 수 있습니다 .

SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
  1. 장애 조치 및 재시작

질문에서 이것을 언급했지만 완전성을 위해 SQL Server는 성능 향상을 위해 ID 값을 캐시합니다. 그러나 서비스가 다시 시작되거나 AG 장애 조치가 발생하면 사전 할당 된 ID 값이 손실 될 수 있습니다. 이로 인해 더 예측 가능한 차이가 발생합니다 (최신 버전의 SQL Server에서는 10,000 개).