데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 666코드의 고유 식별자 오류

 

·         Version : SQL Server

 

SQL Server에서 UNIQUE 속성을 사용하여 클러스터된 인덱스(clustered index) 만들지 않으면 데이터베이스 엔진은 4바이트의 고유 식별자 열을 테이블에 자동 추가하고 필요한 경우 데이터베이스 엔진은  키를 고유하게 만들기 위해 행에 고유 식별자 값을 자동으로 추가한다 열과 해당 값은 내부적으로 사용되며 사용자가 보거나 액세스할  없다.

 

고유 식별자와 관련된 문제는 발생할 가능성의 거의 없지만 고유 식별자   제한인 2,147,483,648 도달할 경우 오류코드 666 발생할  있다.

Msg 666, Level 16, State 2, Line 1

 

The maximum system-generated unique value for a duplicate group was exceeded for indexwith partition ID <PARTITIONID>. Dropping and re-creating the index may resolve this;otherwise, use another clustering key.

 

오류 메시지를 살펴보면 해당 문제를 해결하기 위한 방법도 명확하게 설명되어 있다관리자는 동일한  값으로 2,147,483,648개의 레코드가 없으면 인덱스를 삭제하고 다시 생성하여  문제를 해결   있다인덱스를 다시 만들면 고유 식별자가 리셋되어 고유식별자 키가 한도에 이르기 전에 테이블 디자인을 검토할 시간을 확보   있다.

 

2018 2저장소 엔진의 설계 목표는 인덱스 리빌드시 고유 식별자를 리셋 않는 것이다따라서 인덱스를 재구성하면 고유 식별자가 리셋 되지 않고 문제가 계속 발생하면서 고유 값이 고갈된  값을 삽입할  있다그러나 현재 엔진 동작은 하나의 특정 경우에 따라 다르며 ALTER INDEX ALL ON <TABLE> REBUILD WITH (ONLINE = ON) 구문을 사용하면 SQL Server 2005부터 SQL Server 2017 버전에서 고유 식별자가 재설정 된다.

Note : 저장소 엔진 설계에 대한 내용은 현재 문서화 되어 있지 않은 내용이며 이후 버전에서 변경될 수도 있으므로 테이블 디자인을 검토하는 것을 권장한다.

 

테이블 디자인 측면에서 중복  값을 가질  있는 고유하지 않는 클러스터링 키를 선택하는 것은 좋은 설계일까아마도 아닐 것이다물론 테이블 디자인에 관해서는 옳고 그름에 대한 답은 없지만 대다수의 경우 고유 식별자에 크게 의존해서는 안된다는 것을 공감할 것이다.

대부분의 경우에 단일 값에 대해 최대 수백 또는 수천 개의 중복 레코드가 있을  있지만 오류 666 발생하면 문제를 해결하는 것은 쉽지만 해결하기 위해 리빌드 실행시 일부 서비스 중지 시간이 발생할  있다결과적으로 고유 식별자에 의존하지 않는 테이블 디자인을 검토하고 설계하는것이 중요하다.

 

아래 링크는 개발 환경에서 오류 666 발생하지 않도록 고유 식별자에 대한 이해도를 높이고 테이블 디자인을 검토하는데 도움이 된다.

·         Uniqueifier details in SQL Server : https://blogs.msdn.microsoft.com/luti/2018/02/16/uniqueifier-details-in-sql-server/

·         Companion content for Chapter 6 (Index Internals) of SQL Server 2008 Internals : https://www.sqlskills.com/blogs/kimberly/companion-content-for-chapter-6-index-internals-of-sql-server-2008-internals/

 

 

[참고자료]

https://blogs.msdn.microsoft.com/psssql/2018/02/16/uniqueifier-considerations-and-error-666/

 

 

2018-07-13 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, unique, clustered index, 클러스터키고유키인덱스 리빌드, error 666, 오류코드 666



출처: https://sqlmvp.tistory.com/1263?category=618825 [Database Lab]
No. Subject Author Date Views
2153 SQL Server MySQL PostgreSQL 비교 jevida(강성욱) 2019.03.26 1070
2152 SQL Server 복잡한 쿼리가 옵티마이저에 미치는 영향과 옵티마이저 timeout jevida(강성욱) 2019.03.26 635
2151 SQL Server 2019 에서 문자열 잘림에 대한 향상된 에러 메시지 반환 jevida(강성욱) 2019.03.26 440
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 541
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 807
2148 SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 427
2147 SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 446
2146 In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 394
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 397
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 426
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 315
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 415
» SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 295
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 353
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 361
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 449
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 459
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 355
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 430
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 232





XE Login