반응형
반응형

SQL Server 2005에서도 SQL Server 2000 마찬가지로 행당 최대 바이트 수는 8,060바이트이지만 SQL Server 2000 달리 SQL Server 2005에서는 varchar, nvarchar, varbinary 또는 sql_variant 또는 CLR 사용자 정의 유형 열을 사용하여 정의된 전체 테이블의 길이가 8,060바이트를 초과할 있습니다. 이것은 varchar, nvarchar, varbinary, sql_variant 또는 CLR 사용자 정의 유형 열을 만들거나 수정할 적용되며 데이터를 업데이트하거나 삽입할 때도 적용됩니다. 오버플로를 포함하는 테이블은 sys.dm_db_index_physical_stats 동적 관리 개체를 사용하여 정보를 얻을 있습니다.

 

n       행당 8,060바이트를 초과하는 varchar, nvarchar, varbinary, sql_variant, CLR 사용자 정의 유형 사용시 고려할 사항

 

1. SQL Server 2005 데이터베이스 엔진에서 페이지당 8KB 제한은 여전히 유효하기 때문에 8,060바이트의 크기 제한을 초과하면 성능이 저하될 수도 있습니다.

그러므로, 오버플로 데이터가 있는 행에서 쿼리가 자주 수행될 가능성이 높은 경우에는 일부 열이 다른 테이블로 이동하도록 테이블을 정규화하십시오.

 

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

 

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

 

4. 클러스터형 인덱스의 인덱스 키는 기존 데이터가 ROW_OVERFLOW_DATA 할당 단위에 있는 varchar 열을 포함할 없습니다.

 

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

 

[따라하기] 오버플로 확인하기

USE Sample;

GO

CREATE TABLE RowOverFlow (

             col1 int identity(1,1),

             col2 char(500),

             col3 varchar(8000),

             col4 varchar(8000)

);

GO

-- 명령이 완료되었습니다.

 

INSERT INTO RowOverFlow(col2, col3)

VALUES ('aaaaa','aaaaaa…<지면 할애로 생략>….aaaa’, 'aaaaaa…..aaaa’);

GO

 

SELECT object_id,index_type_desc,alloc_unit_type_desc

FROM sys.dm_db_index_physical_stats(db_id('sample'),Object_id('RowOverFlow3'),NULL,NULL,NULL)

GO

/*

229575856           HEAP    IN_ROW_DATA

229575856           HEAP    ROW_OVERFLOW_DATA

*/

 

반응형

+ Recent posts

반응형