테이블이 만들어졌으나 최대 행 크기(18642)가 행 당 최대 바이트 수(8060)를 초과합니다. 결과 행 길이가 8060바이트를 넘으면 이 테이블의 행에서 INSERT 또는 UPDATE가 실패합니다
------------------------------------------------------------------------------------------
테이블 생성시 전체 행크기가 (8060)를 초과하여 나타나는 문제
Create Table 테이블명
(
id int,
QUESTION nvarchar (5000),
ANSWER nvarchar (5000),
..
)
오류 문구
테이블이 만들어졌으나 최대 행 크기(18642)가 행 당 최대 바이트 수(8060)를 초과합니다
변경하여 해결
ANSWER
※ 해당 문제가 발생하지 않도록 테이블 생성시 전체 행크기를 고려하여 설계 하여야 한다
컬럼 길이의 총 합이 페이지 크기를 넘어설 때 발생하는 경고.
이러한 경우 테이블은 생성되나 실제 데이터 insert 시에 한 개 이상의 컬럼에서 실 크기가 용량을 넘어서면 그때는 에러가 발생하면서 insert 가 안됨.
QUESTION 컬럼 뿐만 아니라 타 컬럼들의 사이즈도 다시 검토하여 불필요하게 사이즈를 늘려 잡는 일이 없도록 한다.
QUESTION 컬럼의 경우 무제한 입력 가능하게끔 설계하는것이라면 text 타입으로 설정.
데이터 타입에 N이 붙는 것은 유니코드 타입임.
다국어 지원이 아니라면 일반 타입을 사용.
==========================================================================================
펌 ++
Q
View에는 몇게의 조인을 거쳐 생성된 Row들을 UNION시켜서 보여 주는 sql이 들어 있습니다.
새로 만들어 진건 아니고염... 계속 사용하던건데 Row겟수가 늘어 나면서 발생한 문제인것 같습니다.
OS는 Windows 2000 Server, DB는 예전에 7.0에서 사용하던 DB를 2000으로 옮겨서 사용 하고 있구염...
Select 되어질 총 Row수는 6000~7000이 입니다.
Error메세지는 다음과 같습니다.
크기가 8306인 행을 정렬할 수 없습니다. 최대 허용 크기(8094)를 초과했습니다.
------------------------------------------------------------------------------------------
행크기체크 ----------
에러 메세지를 잘 보시면 Row의 갯수가 많아서 에러가 나는 것이 아니라, 행의 크기가 커서 에러가 나는 것입니다. 행의 크기가 8306이나 되기 때문에 에러가 나는 것입니다. MS SQL 서버가 내부적으로 정렬을 할 수 있는 크기는 8000 바이트 정도 입니다. 이보다 크게 되면 정렬을 할 수 없습니다.
UNION의 경우 동일한 결과는 한번만 보이는 기능이 있으므로 내부적으로 GROUP BY 가 수행됩니다. 이를 위해 역시 내부적인 정렬이 이루어 집니다. 이 때문에 쿼리문에서 ORDER BY를 사용하지 않더라도 내부적인 ORDER BY 때문에 행의 크기가 너무 커 UNION이 되지 못하는 것입니다.
동일한 내용을 갖는 행이 없다고 한다면 UNION 대신 UNION ALL을 사용하면 에러가 나지 않을 것입니다.
확인해 보세요.
메모리 늘이는 방법 ----------
min memory per query 옵션
min memory per query 옵션을 사용하여 쿼리 실행을 위해 할당할 최소 메모리 양(KB)을 지정할 수 있습니다. 예를 들어, min memory per query를 2048KB로 설정하면 쿼리 실행 시 최소한 총 메모리만큼 얻을 수 있습니다. min memory per query를 512 - 2147483647KB(2GB)로 설정할 수 있습니다. 기본값은 1024KB입니다.
Microsoft® SQL Server™ 2000 쿼리 프로세서는 쿼리에 할당할 최적의 메모리 양을 결정하려 합니다. min memory per query 옵션을 사용하면 관리자가 단일 쿼리에서 수신할 최소 메모리 양을 지정합니다. 일반적으로 많은 양의 데이터에 대해 해시 및 정렬 작업을 수행하는 경우에는 쿼리가 이보다 더 많은 메모리를 수신합니다. min memory per query 값을 늘리면 작거나 중간 크기의 일부 쿼리의 성능이 향상되지만, 메모리 리소스의 경쟁이 심해질 수 있습니다. min memory per query에는 정렬을 위해 할당된 메모리를 포함하며 SQL Server 7.0 이전 버전의 sort pages 옵션을 바꿉니다.
min memory per query는 고급 옵션입니다. sp_configure 시스템 저장 프로세서를 사용하여 설정을 변경하면 show advanced options를 1로 설정할 때만 min memory per query를 바꿀 수 있습니다. 이 설정은 서버를 중지했다가 다시 시작하지 않아도 즉시 적용됩니다.
최소 쿼리 메모리를 설정하려면
엔터프라이즈 관리자
최소 쿼리 메모리를 설정하는 방법(엔터프라이즈 관리자)
최소 쿼리 메모리를 설정하려면
서버 그룹을 확장합니다.
마우스 오른쪽 단추로 서버를 클릭한 다음 등록 정보를 클릭합니다.
메모리 탭을 클릭합니다.
최소 쿼리 메모리 상자에 512부터 2147483647KB 범위의 값을 입력하거나 선택합니다.
기본값은 1024KB입니다.
'DB' 카테고리의 다른 글
(MSSQL) 전체 인덱스 Script 뜨기 (0) | 2017.04.13 |
---|---|
(MSSQL) sp_ 리스트 (0) | 2017.04.13 |
(MSSQL) cpu 점유율 높은 쿼리 찾아내기 (0) | 2017.04.13 |
(MSSQL) 프로시저 이력보기 (delete , create, modify) (0) | 2017.04.13 |
(MSSQL) 테이블 컬럼 명칭 변경 (0) | 2017.04.13 |