본문 바로가기

MSSQL

MSSQL : Identity Jump 1000

반응형

MS SQL Server 2012부터 도입된 'Identity Cache’라는 기능 때문에 발생하는 현상입니다. 이 기능은 성능 향상을 위해 identity 값을 캐시에 저장하고, 데이터베이스 장애나 서버 재시작 시 일부 할당된 값이 손실될 수 있습니다. 이로 인해 identity 값에 간격이 생길 수 있습니다. 예를 들어, ID 컬럼의 값이 1, 2이고 ID 점프가 발생하면 다음 ID 컬럼의 값은 3이 아니라 1003이 될 수 있습니다.

이 현상은 버그가 아니라 의도된 동작입니다. Identity 값은 유일성만 보장하고, 연속성은 보장하지 않습니다. 만약 연속성이 필요하다면, 애플리케이션에서 자체적으로 키 값을 생성하거나, NOCACHE 옵션을 사용하는 시퀀스 생성기를 사용해야 합니다. 또한, 데이터베이스 범위 설정을 통해 Identity Cache 기능을 끌 수도 있습니다. 다음과 같은 명령어를 사용하면 됩니다.

 

ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;


하지만 이 명령어는 캐시를 사용하지 않기 때문에 성능 저하를 가져올 수 있습니다. 따라서 Identity Cache 기능을 사용하는 것이 좋습니다.

이 기능은 성능 향상을 위해 도입된 것이므로, identity 값의 간격에 신경 쓰지 않고, 유일성만 보장하는 것이 중요합니다.

 

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql?view=sql-server-ver16

 

ALTER DATABASE SCOPED CONFIGURATION - SQL Server (Transact-SQL)

개별 데이터베이스 수준에서 여러 데이터베이스 구성 설정을 사용하도록 설정합니다.

learn.microsoft.com

 

반응형