database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 10217 게시물 읽기
No. 10217
pg 세션 처리 문제
작성자
궁금
작성일
2020-12-17 10:35
조회수
173

현재 jdbc를 사용해서 프로그램에서 truncate/select/insert 순서로 각각의 트랜잭션으로 수행하는 로직이 있습니다.


커넥션 하나에서 아래 순서로 처리가 되고 이런 커넥션이 20개가 되지 않습니다. (각세션마다 다른 테이블작업임)

begin --> truncate --> end --> begin --> select --> end --> begin --> insert --> end;


한참 잘 돌다가 약 5~10분 쯤되면 갑자기 한 두개 select 트랜잭션이 시작되자마자 변경없이 active 상태로 몇시간동안 머물고 있습니다. 

실제론 lock 발생도 아니고, 해당 select 쿼리가 오래걸리는 작업도 아닙니다. (이 문제가 발생할 때 같은 쿼리를 돌려보면 0.3초정도 걸리는 쿼리입니다.)

테이블 사이즈도 100MB 미만인데 해당 프로세스가 cpu 100%를 물고 있는 상태로 처리되지 않고 머물러 있습니다

DB로그에도 남지않고, 프로그램 로그에도 이상로그가 없는데 도대체 뭐가 문제인지 확인이 어렵습니다.

(debug5 까지 돌려보아도 특별한 로그가 없습니다.)

이 문제는 발생시간이 일정하지도 않고 항상 발생하는 것도 아닙니다. (10번 중 3번정도 발생)


네트워크쪽 timeout인가 싶어서 15분 --> 60분으로 늘려봤지만 문제 현상은 여전히 발생합니다.


ulimit 값도 충분하다고 생각됩니다..


[postgres@localhost ~]$ ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 512693

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 86000

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 4096

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited


딱 한번 걸렸던 세션이 자동 처리된 적이 있었는데

그때 아래 로그가 확인되기는 했습니다. 그치만.. 구글링 해봐도 소스내용밖에 나오지 않네요

ProcessCatchupEvent outside transaction

cache state reset

sinval catchup complete, cleaning queue



의심해볼만한 부분이 뭐가 있을까요? 

이 글에 대한 댓글이 총 3건 있습니다.

데이터베이스 버전 업그레이드를 시도해 봐야겠네요. 


9.6 이상 버전부터는 해당 세션의 wait_event가 예전버전보다 세밀하게 볼 수 있으니, pg_stat_activity 를 통해서 살펴보세요. 


정 안되면, 그 오래걸리는 프로세스 pid 기준으로 strace 명령을 이용해서 그 프로세스가 도데체 뭘하고 있는지 살펴볼 수도 있습니다. 

김상기(ioseph)님이 2020-12-17 11:36에 작성한 댓글입니다.

현재 최신버전으로(v13.1) 테스트 중이고

v10의 최신 DB 로도 테스트 해봤으나 같은 현상이 발생했습니다

문제 세션의 wait_event_type, wait_event 은 null 상태로 확인됩니다.


혹시 trace 할만한 도구 추천하실만한게 있을까요 

궁금님이 2020-12-17 13:01에 작성한 댓글입니다. Edit

strace -p 해당세션프로세스번호

김상기(ioseph)님이 2020-12-17 15:12에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
10220array_to_string 사용 쿼리 질문 드립니다. [1]
이요남
2020-12-22
128
10219Linux C 프로그램에서 postgresql DB에 한글 Insert 시 Insert 실패 문제 [1]
초보DB
2020-12-22
131
10218원격지 파일로 data import [1]
궁금
2020-12-21
118
10217pg 세션 처리 문제 [3]
궁금
2020-12-17
173
10216PostgreSQL Vacuum에 관해 [3]
GOmadafter
2020-12-16
172
10215파티션 관리 자동화 문의 [3]
lucky
2020-12-15
182
10214[CentOS] *.run 으로 설치된 패키지를 찾는 명령어가 궁금합니다.  [3]
lucky
2020-12-10
155
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2020 DSN, All rights reserved.
작업시간: 0.011초, 이곳 서비스는
	PostgreSQL v13.1으로 자료를 관리합니다