좀 저사양의 pc로 postgresql을 접속하는 프로그램을 만들었거든요.
INSERT 문에다가 nextval(sequence_name) 을 넣고 입력하는 부분이 있는데 가끔 가다가 이게 이 문장에서 블락되고 아무 짓을 안 하네요.
insert 실패든 sequence 값 가져오기 실패든 뭐라고 에러라도 내면서 진행을 하면 되는데 그러질 않고 그냥 하염없이 기다리고 있습니다. 이런 현상이 일어나는 원인이 있을까요?
시스템이 안좋다 보니 pc가 좀 바빠서 거의 항상 postgres 프로세스는 6개정도는 떠 있습니다. (처음 하나) CPU 사용률도 top으로 보면 cummulative time이 전체 CPU time의 60% 정도를 postgresql가 쓰고요. 바빠서 그러는건지..
혹시 시퀀스가 트랜잭션에 걸려서 블락되는가 해서(커밋을 안하고 있으면 락을 거니까 락을 가진 놈이 종료하기 전에 다음놈은 블락되서 기다리잖아요. 그 생각을 하고...) 테스트코드를 만들어서 트랜잭션 막 만들어놔도 시퀀스 잘만 가져오더군요. 프로세스를 많이 띄워볼려고 sleep 상태로 만들어 놓고 계속 프로세스를 만들어서 트랜잭션을 만들었는데 시퀀스값은 잘 가져오고 too many open files 에러만 나와서 똑같은 상황을 만들어보는데 실패했습니다.
레드햇 리눅스 7.0 에서 embedded sql을 이용해서 만든 프로그램입니다. 조언 부탁드립니다.
|