티스토리 뷰

반응형

Informix에는 임시 테이블이 만들어지는 dbspace 를 DBSPACETEMP 설정 파라미터에서 지정할 수 있습니다.

그러나 DBSPACETEMP에 여러개의 dbspace를 지정해도 임시 테이블이 하나의 dbspace 만 사용해 만들어지는 경우가 있습니다. 바로 사용자가 아닌 DB서버에 의해 임시테이블이 만들어지는 경우입니다.

 

IBM 문서에 따르면 DB서버에 의해 임시 테이블이 만들어질 경우, DBSPACETEMP에 지정한 dbspace 중 하나를 사용한다고 나와 있습니다. 

When the database server creates a temporary table, it stores the temporary table in one of the dbspaces that you specify in the DBSPACETEMP configuration parameter or the DBSPACETEMP environment variable. The environment variable supersedes the configuration parameter.

위에서 설명하는 내용의 간단한 예시를 들어보겠습니다.

 

1. 임시 테이블 관련 설정 확인

아래와 같이 DBSPACETEMP 설정에 3개의 dbspace 명을 지정했습니다.

$ onstat -g cfg DBSPACETEMP

IBM Informix Dynamic Server Version 12.10.FC13WE -- On-Line -- Up 02:17:30 -- 217936 Kbytes

name                      current value
DBSPACETEMP               tmpdbspace1,tmpdbspace2,tmpdbspace3

 

2. 임시 테이블 현황 모니터링 준비

아래 링크에서 Informix의 임시 테이블 위치와 사용량 등을 모니터링 할 수 있는 쿼리를 참고하실 수 있습니다.

나중을 위해 뷰로 만들어 놓는 것도 좋아보이네요.

https://www.oninitgroup.com/faq-items/dbspaces-how-to-list-temp-dbspace-contents/

 

3. 임시 테이블이 생성되는 쿼리 준비

Informix 카탈로그 정보를 활용한 테스트용 쿼리입니다.

여기서 sysrawdsk 카탈로그 테이블의 건수는 24,394,496 개 입니다.

FROM 절의 서브쿼리에 의해 임시 테이블이 생성되도록 의도한 것입니다. 

SELECT *
FROM   (SELECT *
        FROM   sysrawdsk
        ORDER  BY 1, 2, 3)

3. 쿼리 실행 및 임시 테이블 모니터링

위의 쿼리를 실행하고 임시 테이블 상태를 확인해봅니다.

임시 테이블이 tmpdbspace1 dbspace에만 만들어지는 것을 확인할 수 있습니다.

Informix 로그에도 임시 테이블 공간이 꽉 찼다는 경고 메시지가 보이네요. 

$ echo "select * from view_temp_tables" | dbaccess sysmaster

Database selected.



owner    database           table                  dbspace      life_time          size_kb         sid         pid hostname             percent

informix sysmaster          _temptable             tmpdbspace1      0 00:00:03       86016         457     4653300 lpar                   86.02


$ onstat -m | tail -2
15:49:38  WARNING: temporary DBspace tmpdbspace1 is full

이렇게 되면 쿼리는 실패하고 결과를 조회하지 못합니다. 제 생각에는 두가지 해결방법이 있습니다.

 

1. temp dbspace 용량을 늘린다.

디스크에 여유가 있다면 임시 테이블이 생성되는 공간을 늘려주는 것이 좋겠죠.

 

2. 쿼리에서 조회 범위를 구분한다.

dbspace를 무한정 늘리기 어렵다면 쿼리에 조건을 추가해봅니다.

아래와 같이 FROM 절의 서브쿼리에 조건을 추가해서 결과 세트를 줄이는 것이죠. 대신 이렇게 구분하게 되면 이전에 조회하려 했던 전체 데이터를 취합하기가 어려울 수도 있겠네요.

SELECT *
FROM   (SELECT *
        FROM   sysrawdsk
        WHERE  pg_chunk = 1
               AND pg_offset < 1000
        ORDER  BY 1, 2, 3)

 

 

 

시스템 자원 상황에 따라 해결방법이 달라질 수 있겠습니다.

 

참고)

https://www.ibm.com/docs/en/informix-servers/12.10?topic=tttdsc-where-database-server-created-temporary-tables-are-stored 

 

Where database server-created temporary tables are stored

When the database server creates a temporary table, it stores the temporary table in one of the dbspaces that you specify in the DBSPACETEMP configuration parameter or the DBSPACETEMP environment variable. The environment variable supersedes the configurat

www.ibm.com

https://www.oninitgroup.com/faq-items/dbspaces-how-to-list-temp-dbspace-contents/

 

How to list temp dbspace contents - Oninit Consulting

Discover how to rapidly identify and access the applications which are filling up your temp DBspaces from our Informix experts

www.oninitgroup.com

 

반응형
댓글