대상 버전
6.1.1 이하 버전.
6.3.1 이상 버전에서는 에러 발생하지 않음.
증상
디스크 테이블에 대해 조인이나 Order by / Group by 등을 사용할 때 다음 에러 발생.
[ERR-311E0 : The estimated size of the index key exceeds the maximum limit.]
원인
다음과 같이 altierr 유틸리티를 이용하여 해당 에러에 대한 설명을 확인할 수 있습니다.
$ altierr 0x311E0
0x311E0 ( 201184) qpERR_ABORT_QDX_MAXIMUM_KEY_SIZE_EXCEED The estimated size of the index key exceeds the maximum limit.
# *Cause:
# - The estimated size of the index key exceeds the maximum limit.
# *Action:
# - Please reduce the number of key columns.
디스크테이블에 대해 조인이나 Order by / Group by 등을 수행할 때 알티베이스는 내부적으로 Temp Tablespace를 사용합니다.
Temp Tablespace는 Disk Tablespace이며 8K의 고정된 Page Size를 가지는데, Temp Tablespace를 사용할 때 8K 이상의 레코드를 만들어야 하는 경우 위와 같은 에러가 발생할 수 있습니다.
참고로 Disk Tablespace의 1Page(8K) 크기를 초과하는 경우는 데이터의 길이가 약 3000Bytes 이상인 경우입니다.
# 예제
# 6.3.1 버전 예제
해결 방안
1. TEMP_TBS_MEMORY 힌트를 이용하여 디스크 Temp Tablespace의 1Page(8K) 크기 제약사항을 피할 수 있습니다.
뿐만 아니라 이 힌트는 temp 영역으로 디스크 대신 메모리 영역을 사용하기 때문에 쿼리 성능 개선에도 효과가 있습니다.
2. 6.3.1 이상 버전으로 업그레이드.
6.3.1 이상 버전에서는 동일 상황에서 에러가 발생하지 않습니다.
참고 사항