>데이터 베이스 >MySQL 튜토리얼 >다시 시작한 후 SQL Server 2012 ID 열이 100초씩 증가하는 이유는 무엇입니까?

다시 시작한 후 SQL Server 2012 ID 열이 100초씩 증가하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-23 14:41:09701검색

Why Does My SQL Server 2012 Identity Column Increment by 100s After a Restart?

SQL Server 2012의 자동 증가 컬럼 비정상적 증가 문제

SQL Server 2012에서는 비정상적인 동작이 관찰되었습니다. "Fee" 테이블에 있는 "ReceiptNo" 열의 자동 증가 값이 간헐적으로 100씩 점프했습니다. 이는 자동 증가 열의 일반적인 증가 패턴과 일치하지 않습니다.

이상행위 내용 :

  • 자체 증가 점프는 100씩 증가하지만 마지막 세 자리는 그대로 유지됩니다(예: 306).
  • 이 동작은 컴퓨터를 다시 시작한 후에 발생합니다.

이유:

이 동작은 SQL Server 2012에 도입된 성능 개선의 결과입니다. 기본적으로 데이터베이스는 이제 int 열에 자동 증가 값을 할당할 때 1000개의 값을 캐시합니다. 다시 시작한 후에는 사용하지 않은 캐시 값이 손실되어 자동 증가 시퀀스에 공백이 발생할 수 있습니다.

문서 참조:

SQL Server 설명서 설명:

"성능상의 이유로 SQL Server는 자동 증가 값을 캐시할 수 있으며, 데이터베이스 오류 또는 서버 재시작 중에 할당된 일부 값이 손실될 수 있습니다... 이로 인해 삽입 시 자동 증가 값에 공백이 발생할 수 있습니다. ."

가능한 해결 방법:

자동 증가 열의 공백이 우려되는 경우 다음 해결 방법을 고려하세요.

  • SEQUENCE 사용: 더 작은 캐시 크기로 시퀀스를 정의하고 열 기본값에 "NEXT VALUE FOR"를 사용합니다.
  • 추적 플래그 272 활성화: 이렇게 하면 자체 증가하는 값의 할당이 기록되므로 차이를 확인할 수 있습니다.
  • 자동 증가 캐싱 비활성화: 특정 데이터베이스에 대해 "ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF"를 수행합니다.

중요 팁:

이러한 솔루션이 완벽한 공백 없는 작동을 보장하지 않는다는 점을 이해하는 것이 중요합니다. 자동 증가 열 자체는 오류나 롤백된 트랜잭션으로 인해 공백 없는 시퀀스를 보장하지 않습니다. 진정한 격차 없는 값을 얻으려면 사용자 지정 알고리즘이나 외부 키 생성기와 같은 다른 솔루션을 고려하세요.

위 내용은 다시 시작한 후 SQL Server 2012 ID 열이 100초씩 증가하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.