>데이터 베이스 >MySQL 튜토리얼 >다시 시작한 후 내 SQL Server ID 증분이 점프하는 이유는 무엇입니까?

다시 시작한 후 내 SQL Server ID 증분이 점프하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-23 14:51:08604검색

Why Does My SQL Server Identity Increment Jump After Restarts?

SQL Server 데이터베이스의 ID 증가 예외

SQL Server 데이터베이스에서 "수수료" 테이블의 "ReceiptNo" 열의 ID 증분은 일관되지 않은 동작을 나타내며, 다시 시작한 후 증분 값이 점프합니다.

이 비정상적인 현상은 주로 다음 세 가지 시나리오에 반영됩니다.

  1. "ReceiptNo"가 1205446이면 1206306으로 점프합니다.
  2. "ReceiptNo"가 1206321이면 1207306으로 점프합니다.
  3. "ReceiptNo"가 1207314인 경우 1208306으로 점프합니다.

이 점프 중에 마지막 세 자리 숫자(306)가 동일하게 유지된다는 점에 주목할 가치가 있습니다. 또한 이 문제는 컴퓨터를 다시 시작한 후에만 발생합니다.

원인 분석:

이 동작은 SQL Server 2012에 도입된 성능 최적화의 직접적인 결과입니다. 이제 데이터베이스는 정수 열에 IDENTITY 값을 할당할 때 캐시 크기 1000을 사용합니다. 서비스가 다시 시작되면 캐시에서 사용되지 않은 값이 손실됩니다.

이 미묘함은 SQL Server 설명서에 문서화되어 있으며, 캐싱으로 인해 ID 값의 차이가 발생할 수 있으며 데이터베이스 오류 또는 서버 재시작 중에 문제가 발생할 수 있음을 명시하고 있습니다.

해결책:

이러한 격차가 바람직하지 않은 경우 다음 해결 방법을 고려하세요.

  1. NOCACHE 옵션과 함께 SEQUENCE 생성기를 사용하세요.
  2. 2008년 이전 R2 동작을 에뮬레이션하여 IDENTITY 할당을 기록하려면 추적 플래그 272를 활성화하세요.
  3. 특정 데이터베이스에 대한 ID 캐싱을 비활성화하려면 "ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF"를 사용하세요.

중요 사항:

이러한 솔루션 중 어느 것도 완벽한 공백이 보장되지는 않는다는 점에 유의하는 것이 중요합니다. ID 증분은 본질적으로 동시 트랜잭션 및 잠재적인 삽입 실패로 인해 공백이 발생할 위험이 있습니다. 진정으로 완벽한 솔루션을 위해서는 다른 접근 방식을 취해야 합니다.

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

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