8KB를 초과하는 행 오버플로 데이터

테이블의 행에는 최대 8,060바이트가 포함될 수 있습니다. SQL Server 2008에서는 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 형식 열이 포함된 테이블에 대해 이러한 제한 사항이 완화되었습니다. 이러한 열 각각의 길이는 여전히 8,000 바이트 이내여야 하지만 이 열이 결합된 경우에는 8,060바이트의 제한을 초과할 수 있습니다. 이것은 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 형식 열을 만들거나 수정할 때 적용되며 데이터를 업데이트하거나 삽입할 때도 적용됩니다.

[!참고]

varchar(max), nvarchar(max), varbinary(max), text, image 또는 xml 열에는 이 제한 사항이 적용되지 않습니다. 이러한 열의 저장소에 대한 자세한 내용은 큰 값 데이터 형식 사용, 텍스트 및 이미지 데이터 사용XML 데이터 사용을 참조하십시오.

행 오버플로 고려 사항

행당 8,060바이트를 초과하는 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 형식 열을 결합할 때는 다음 사항을 고려하십시오.

  • SQL Server에서 페이지당 8KB의 제한은 여전히 유효하기 때문에 8,060바이트의 행 크기 제한을 초과하면 성능이 저하될 수도 있습니다. varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 형식 열의 조합이 이 제한을 초과하면 SQL Server 데이터베이스 엔진은 원래 페이지의 24바이트 포인터를 유지하면서 너비가 가장 큰 레코드 열을 ROW_OVERFLOW_DATA 할당 단위에 있는 다른 페이지로 이동합니다. 업데이트 작업에 따라 레코드가 길어지는 경우 큰 레코드는 동적으로 다른 페이지로 이동합니다. 업데이트 작업에 따라 레코드가 짧아지는 경우 해당 레코드는 IN_ROW_DATA 할당 단위에 있는 원래 페이지로 다시 이동할 수도 있습니다. 또한 행 오버플로 데이터가 포함된 큰 레코드에 대한 정렬이나 조인 같은 다른 SELECT 작업을 쿼리 및 수행하면 해당 레코드가 비동기적으로 처리되지 않고 동기적으로 처리되기 때문에 처리 시간이 느려집니다.

    따라서 여러 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 형식 열이 있는 테이블을 디자인할 때는 오버플로될 가능성이 있는 행의 비율과 이 오버플로 데이터가 자주 쿼리될 가능성이 있는지 고려하십시오. 행 오버플로 데이터가 있는 다수의 행에서 쿼리가 자주 수행될 가능성이 높은 경우에는 일부 열이 다른 테이블로 이동하도록 테이블을 정규화하십시오. 그런 다음 비동기 JOIN 작업에서 이 테이블을 쿼리할 수 있습니다.

  • varchar, nvarchar, varbinary, sql_variant 및 CLR 사용자 정의 형식 열의 개별 열 길이에는 여전히 8,000바이트의 제한이 적용되어야 합니다. 이 열이 결합되는 경우에만 테이블의 8,060바이트의 행 제한을 초과할 수 있습니다.

  • char 및 nchar 데이터를 비롯하여 다른 데이터 형식 열의 합계에는 8,060바이트의 행 제한이 적용되어야 합니다. 큰 개체 데이터도 8,060바이트의 행 제한에서 제외됩니다.

  • 클러스터형 인덱스의 인덱스 키는 기존 데이터가 ROW_OVERFLOW_DATA 할당 단위에 있는 varchar 열을 포함할 수 없습니다. 클러스터형 인덱스를 varchar 열에 만들고 기존 데이터가 IN_ROW_DATA 할당 단위에 있는 경우에는 데이터를 행 외부로 밀어넣을 열에서의 후속 삽입 또는 업데이트 작업이 실패합니다. 할당 단위에 대한 자세한 내용은 테이블 및 인덱스 구성을 참조하십시오.

  • 행 오버플로 데이터가 있는 열을 비클러스터형 인덱스의 키 열이나 키가 아닌 열로 포함할 수 있습니다.

  • 스파스 열을 사용하는 테이블의 레코드 크기 제한은 8,018바이트입니다. 변환된 데이터와 기존 레코드를 합한 크기가 8,018바이트를 초과하면 MSSQLSERVER ERROR 576이 반환됩니다. 열이 스파스에서 스파스가 아닌 유형으로 변환되면 데이터베이스 엔진에서 현재 레코드 데이터의 복사본을 보관합니다. 따라서 레코드에 필요한 저장소 크기가 일시적으로 두 배가 됩니다. .

  • 행 오버플로 데이터가 포함될 수 있는 테이블이나 인덱스에 대한 정보를 얻으려면 sys.dm_db_index_physical_stats 동적 관리 함수를 사용합니다.

참고 항목

개념