Common Issues
O2 Extension을 사용하면서 문제가 발생할 경우 수행할 수 있는 조치 방법을 설명한다.
예외 발생
아래 방법으로 해결되지 않는 경우 매뉴얼에 기재된 기술서비스센터의 Tmax OpenSQL Support 팀에 문의한다.
에러 코드가 ‘O2’로 시작할 경우
O2 Extension에서 생성한 커스텀 에러는 모두 ‘O2’로 시작하는 에러 코드가 부여되었다. 만약 O2 Extension 사용 시 ‘O2’로 시작하는 에러 코드가 발생한 경우 아래와 같이 조치를 취한다.
TroubleShooting - 에러 코드 페이지를 참조하여 상황에 맞는 에러인지 확인한다.
상황에 맞는 에러인 경우 TroubleShooting - 에러 코드 조치 가이드에 맞게 조치한다.
에러 코드가 ‘O2’로 시작하지 않을 경우
만약 O2 Extension 사용 시 ‘O2’로 시작하지 않는 에러 코드가 발생하더라도 O2 Extension에서 발생시킨 예외일 수 있다. 해당 상황에서는 아래와 같이 조치를 취한다.
PostgreSQL Error Codes를 참조하여 발생한 에러 코드가 상황에 맞는 에러인지 확인한다.
상황에 맞는 에러인 경우 PostgreSQL Error Codes 조치 가이드에 맞게 조치한다.
성능 저하 발생
데이터베이스의 성능 저하는 복합적인 원인을 가질 수 있다. O2 Extension 사용 시 성능 저하가 발생하더라도 PostgreSQL 코어나 다른 요소로부터 기인한 문제일 수 있다.
O2 Extension으로부터 기인한 성능 저하 문제인지 확인하는 몇 가지 방법을 제시한다.
O2Functions의 빌트인 함수를 대체할 수 있는 PostgreSQL 빌트인 함수로 변경하여 테스트 한다.
만약 PostgreSQL 빌트인 함수로 대체 후 성능 저하가 해결된다면 O2Functions로부터 기인한 문제이므로 Tmax OpenSQL Support 팀에 문의한다.
만약 성능 저하가 해결되지 않는다면 PostgreSQL 코어나 다른 요소로부터 기인한 문제일 수 있으므로 병목현상의 원인을 다른 요소에서 찾아야 한다.
빌트인 패키지 사용 시 성능 저하가 발생한 경우 타임아웃에 걸리지 않았는지 확인한다.
DBMS_PIPE, DBMS_ALERT와 같은 패키지는 이벤트가 발생할 때까지 기다릴 타임아웃이 주어진다. 이 때 타임아웃이 너무 크게 주어진 경우 성능 저하로 보일 수 있으므로 적절한 타임아웃이 주어지도록 조치한다.
Callgrind와 같은 프로파일링 툴을 사용하여 병목현상의 위치가 O2 Extension인지 확인한다.
싱글 세션 강제종료 발생
PostgreSQL은 한 세션이 한 프로세스를 점유한다. 만약 질의 처리 중 세션이 강제 종료될 경우 세션이 점유하고 있던 프로세스도 같이 강제 종료된다. 다른 세션은 영향을 받지 않는다.
만약 O2 Extension에서의 버그로 인해 Segmentation Fault와 같은 시그널을 유발하는 에러가 발생할 경우를 대비하여 O2 Extension은 커스텀 시그널 핸들링 로직을 PostgreSQL에 주입했다. 커스텀 시그널 핸들링 로직은 시그널로 인해 세션이 강제 종료될 경우 PostgreSQL 로그에 문제가 발생한 위치의 Backtrace 로그를 출력한다.
해당 시나리오가 발생할 경우 PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 Tmax OpenSQL 지원팀에 문의한다.
모든 세션 강제종료 발생
PostgreSQL의 에러 레벨 중 ‘PANIC’ 레벨은 모든 세션을 강제 종료한다.
O2 Extension 사용 시 공유 메모리에 대한 잘못된 제어 및 접근을 동반한 버그로 인해 ‘PANIC’ 레벨의 에러가 발생할 수 있다. DBMS_PIPE
와 DBMS_ALERT
는 공유 메모리를 사용하고 있는 Extension으로 모종의 이유로 인해 공유 메모리 제어 시 에러가 발생할 경우 상기 상황이 발생할 가능성이 있다.
해당 상황이 발생한 경우 공유 메모리가 손상되었을 가능성이 있으므로 인스턴스 재기동이 필요하다. PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 Tmax OpenSQL 지원팀에 문의한다.
TEXT 타입에 많은 양의 데이터 입력시 Out of memory 발생
이 결과는 Postgresql의 스펙에 따른 한계로 보인다.
입력하는 데이터의 크기를 적절한 수치로 줄여보고 해당 방법으로도 해결이 되지 않는다면, PostgreSQL 로그에서 Backtrace 로그를 찾아 저장하고 Tmax OpenSQL 지원팀에 문의한다.
Last updated