개요
질의문 수행 시 발생하는 ERR-11183 ( 70019) Insufficient page descriptor area in the temp table. 의 발생 원인과 조치 방법에 관해 설명한다.
버전
- Altibase 서버 6.3.1 이상
- Altibase 서버 7.1.0.5.0 까지
- Altibase 7.1.0.5.1 이상은 BUG-48369 반영으로 이 에러가 발생하지 않는다.
현상
질의문에 디스크 테이블이 사용되고 SORT 또는 HASH 연산 처리가 필요한 질의문을 수행할 때 발생할 수 있다.
원인
이 에러는 아래의 조건을 만족하는 경우 발생한다.
- 디스크 임시 테이블스페이스의 최대 크기가 TEMP_MAX_PAGE_COUNT 보다 크게 설정되어 있고
- TEMP_MAX_PAGE_COUNT를 초과한 크기의 디스크 임시 테이블스페이스가 필요한 질의문을 수행한 경우
Altibase 서버는 디스크 테이블에 대한 질의 처리 과정에서 SORT/HASH 연산이 필요할 경우 빠른 연산을 위해 메모리에 일정 크기를 할당하여 사용한다. 만약 정해진 크기의 메모리를 모두 사용하고 SORT/HASH 연산을 위한 공간이 추가적으로 필요한 경우 디스크 임시 테이블스페이스를 사용한다. 이때 디스크 임시 테이블스페이스로 사용할 수 있는 전체 페이지 수는 TEMP_MAX_PAGE_COUNT 프로퍼티에 의해 정해져 있다.
Insufficient page descriptor area in the temp table. 에러 발생 예
디스크 임시 테이블스페이스의 최대 크기가 2G, TEMP_MAX_PAGE_COUNT프로퍼티의 값이 32767(256MB) 로 설정되어 있고,
SORT 연산을 위한 크기가 TEMP_MAX_PAGE_COUNT프로퍼티 값 32767(256MB)을 초과하는 질의문을 수행한 경우.
질의문 수행 중 디스크 임시 테이블스페이스 사용량을 조회하면 디스크 임시 테이블스페이스 사용량이 TEMP_MAX_PAGE_COUNT프로퍼티 값과 근사함을 볼 수 있다.
조치
디스크 임시 테이블스페이스의 최대값에 맞춰 TEMP_MAX_PAGE_COUNT 프로퍼티의 값을 변경한다.
디스크 임시 테이블스페이스의 최대값 확인
TEMP_MAX_PAGE_COUNT는 모든 디스크 임시 테이블스페이스가 최대로 사용될 상황을 가정하고 설정해야 한다. 그러므로 아래 질의문으로 Altibase 서버에 생성한 모든 디스크 임시 테이블스페이스의 최대값을 더한 값 을 확인한다.
디스크 임시 테이블스페이스 최대값 총 합TEMP_MAX_PAGE_COUNT 프로퍼티 적정값 계산
TEMP_MAX_PAGE_COUNT 프로퍼티의 단위는 페이지 수로, 값은 아래 수식으로 계산한다.
TEMP_MAX_PAGE_COUNT = 디스크 임시 테이블스페이스 최대값 총 합 / 8192
TEMP_MAX_PAGE_COUNT 프로퍼티 변경
TEMP_MAX_PAGE_COUNT는 Altibase 운용 중 시스템 레벨로 변경할 수 있다.
V$PROPERTY를 조회하여 변경값을 확인한다.
ALTER SYSTEM 으로 변경한 값이 Altibase 서버 재구동 후에도 반영되도록 Altibase 서버 설정 파일도 변경한다.
TEMP_MAX_PAGE_COUNT 프로퍼티 변경 시 고려사항
아래 세 개 프로퍼티는 TEMP_MAX_PAGE_COUNT에 영향을 받는다.
- TOTAL_WA_SIZE
- SORT_AREA_SIZE
- HASH_AREA_SIZE
따라서 TEMP_MAX_PAGE_COUNT를 변경하면 이 프로퍼티들도 변경해야한다.
각 프로퍼티 별 권고값은 아래와 같다. 권고값은 기본값 비율에 따라 산정한 것으로 운용 중 해당 프로퍼티의 적정값은 변경될 수 있다.- TOTAL_WA_SIZE : TEMP_MAX_PAGE_COUNT의 256배
- SORT_AREA_SIZE : TEMP_MAX_PAGE_COUNT의 2배
- HASH_AREA_SIZE : TEMP_MAX_PAGE_COUNT의 8배
- TOTAL_WA_SIZE = 1048576*256 = 268435456 (단위는 바이트)
- SORT_AREA_SIZE = 1048576*2 = 2097152 (단위는 바이트)
- HASH_AREA_SIZE = 1048576*8 = 8388608 (단위는 바이트)
아래 세 프로퍼티도 TEMP_MAX_PAGE_COUNT와 마찬가지로 Altibase 운용 중 시스템 레벨로 변경할 수 있다.
V$PROPERTY를 조회하여 변경값을 확인한다.
ALTER SYSTEM 으로 변경한 값이 Altibase 서버 재구동 후에도 반영되도록 Altibase 서버 설정 파일도 변경한다.
프로퍼티 변경 시 영향도
TOTAL_WA_SIZE 프로퍼티의 경우 설정 즉시 V$MEMSTAT의 ALLOC_SIZE와 MAX_TOTAL_SIZE가 증가하며 동시에 Altibase 서버 프로세스의 메모리도 증가한다.
메모리가 증가하는 영역은 Altibase 버전에 따라 다르다. Altibase 7 의 경우 Temp_Memory 영역이 증가하며, Altibase 6.3.1, 6.5.1의 경우 Storage_Disk_Buffer 영역이 증가한다.
V$MEMSTAT 확인 방법은 아래와 같다.
Altibase 7 이상Altibase 6.3.1, 6.5.1
Unix/Linux의 경우 ps명령어로 Altibase 서버 프로세스의 메모리 증가 여부를 확인할 수 있다.TOTAL_WA_SIZE 변경 직후 확인 시 vsz가 증가하며 sort/hash 연산 발생할 때 rss가 증가한다.
Linux, SunOSHP-UXAIX