증상

Microsoft SQL Server 2012 또는 SQL Server 2014의 테이블에 열을 추가 한다고 가정 합니다. 행의 크기가 8060 바이트에 허용 되는 최대 크기와 가까운 경우 추가 작업에 시간이 오래 걸릴 수 있습니다.

원인

이 문제는 행의 총 크기가 최대 허용 행 크기에 근접 한 경우 SQL Server는 테이블의 전체 검사를 수행 하 여 새 열을 추가 해도 데이터 무결성을 위반 하지 않도록 합니다. SQL Server 2012 이전의 버전은이 검사를 수행 하지 않으며 DDL (데이터 정의 언어)이 더 빠르게 실행 되도록 합니다. 그러나이 동작은 행의 크기가 허용 되는 크기를 초과 하는 경우 행을 업데이트 하거나 축소 하는 등의 후속 작업에 오류가 발생 합니다.

각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.

추가 정보

  • 시작 매개 변수를 사용 하 여 추적 플래그 647를 설정할 수 있습니다. 자세한 내용은 데이터베이스 엔진 서비스 시작 옵션을 참조 하세요.

  • 다음 쿼리를 실행할 수 있습니다 (<테이블 이름> 실제 테이블 이름으로 바꿈) 하 여 프로덕션 시스템에서 작업 전에 특정 테이블을 테스트 하 고이 문제의 영향을 계획 하세요. 결과가 8060 보다 큰 경우 표에이 문제가 적용 됩니다. 또한 열을 삭제 한 경우에는 다시 작성 옵션을 사용 하 여 테이블을 변경 해야 합니다. 테이블을 다시 빌드하면 쿼리를 통해 올바른 결과가 반환 될 수 있습니다.

    select  1+1+2 + 2 +  (case  when sum (case when leaf_offset < 0 then 1 else 0 end) > 0 then 2 else 0 end)  +  ( (count (*) + 7)/8 ) + count (case when leaf_offset < 0 then 1 else null end) * 2 +  sum( case when max_length=-1 then 24 else max_length end)  from sys.system_internals_partition_columns   col join sys.partitions par on col.partition_id = par.partition_id  where object_id = object_id ('<table name>')  and  index_id in (0,1) and partition_number =1 
  • 응용 프로그램이 자주 테이블에 새 열을 추가 하는 경우 가변 길이 열 또는 스파스 열을 추가 하는 것이 좋습니다. 모든 열의 총 크기가 8060 바이트를 초과 하는 경우에도 메타 데이터 전용 작업입니다.

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.