오라클 오류 (Got minus one from a read call) 0 5 54,034

by 나초보 [2013.07.02 14:33:21]



안녕하십니까?

더운데다 비까지 와서 끈적끈적~한 날이네요;

이런 날 골치아픈 사항이 있어 질문드립니다.

배치로 실행되는 java 프로그램인데, DB 에 데이터 insert 시.. 특정한 사항이 되면

(아마도, insert 되는 row 가 많이지면..) 'Got minus one from a read call'이란

오류가 발생하게 됩니다.

찾아보니 DB 의 processes 를 늘려 주라는 내용이 있는데..

여기서 processes 의 갯수는 음.. 어떤 기준으로 늘려줘야 하는 것인지요.

예를 들어 현재 100개인데 1000개로 무작정 늘려도 되는 것이지 모르겠네요..

답변주시면 감사하겠습니다.

이런 날일수록 감기 조심하세요~
by 아발란체 [2013.07.02 15:09:26]

유형1.
리스너를 찾을 수 없을 때  WAS에서 DB POOL 생성 시도 할 때 오류.
==> 원래 정상 동작 하던 것이면 패스.

유형2.
시스템 잘 쓰다가 발생한 것이면 WAS에서 지정한 DB CONNECTION POOL수가
DB에서 설정된 세션 수를 초과하여 발생.
==> 이 경우 WAS 수를 줄이던가(관련 설정 변경), DB 세션 수를 늘려서 해결.

유형3.
DB 서버, OS 레벨에서 해당 사용자 동시 접속수 초과.
==> OS 레벨에세 해당 사용자 동시 접속수 변경

**기타
수를 늘리는 기준은, 사양 및 기타 환경을 고려.
무작정 늘려도 WAS에서 정해진 수가 있으면 그 수를 초과 하지 않기 때문에 상관 없을 것 같구,
그 수가 많다면 최대치로 수를 사용할 때 전체 시스템 성능이 나빠질 수 있습니다.

게임으로 따지면 유저 데이타 서버인데, 1서버에 동시 접속자를 막 늘려버리면
같은 성능인데 해당 서버에 접속한 모든 유저가 게임 플레이 할 때 느려지는거죠.


by 나초보 [2013.07.02 17:14:44]
답변 감사합니다.

그런데.. 질문이 하나 더 있습니다.

was로 톰캣을 사용하고 있는데, bat파일로 class 파일을 호출하여 실행하는 방식 입니다.

이 경우 톰캣서버에 별도로 DB CONNECTION POOL의 갯수를 지정하는 부분이 없습니다.

구동 자체가 java Application 으로 되는 것이다 보니.. 저 부분을 어디서 설정해 줘야 하는지 감이 안 오네요..

웹서버로 구동되는것일 경우 context.xml 에서 설정을 해주면 될 것 같은데 이 경우는 그런것도 아니라서요.

혹 설정해 주는 부분이 있을까요?

현재 같은 서버에서 다른 프로그램은 잘 구동되고 있고, DB도운영되고 있어서 근본적인 환경 문제라기 보다는

이 시스템에 한한 문제인것 같습니다.

by 부쉬맨 [2013.07.02 16:59:32]
코딩을 
설마 그러지는않겠지만...

insert 할때 멀티스레드형태라면
connection 을 여러개를 만들어서 하다보니 양이 많아지다보면 그 커넥션 양조차도 
많아져서 생기는문제라고한다면???

코딩을 바꿔야될거같고요
원초적인문제를 찾아보셔야될뜻..

by 나초보 [2013.07.02 17:15:55]
답변 감사 합니다~

이 프로그램의 경우 txt 파일을 읽어서 insert 되고 있는데..

안그래도 파일 단위로 커넥션을 맺고 끊도록 수정을 하였습니다.

음.. 혹시 현재 사용되고 있는 process 갯수를 바로 확인하는 방법은 없는지요..

by 이재현 [2013.07.02 18:52:41]
파일 단위로 하지마시고, 커넥션 풀을 활용하세요.


select * from v$resource_limit
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입