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 8294 게시물 읽기
No. 8294
PQsetdbLogin()를 이용한 커넥션 풀 구현 시 오류
작성자
박성진(myselp)
작성일
2009-07-22 17:19
조회수
6,617

개인적으로 커넥션 풀을 구현하기 위해서

먼저

PQsetdbLogin() 함수를 이용해서 6개 정도의 커넥션을 생성해서

모두 성공적으로 생성되었습니다.

여러개의 Thread에서 사용되지 않은 커넥셔늘 받아서

"SELECT * from table" 명령을 실행했습니다.

5번 정도로 다른 테이블을 SELECT하는데

어쩔때는 모두 성공하고

어쩔때는 2개 정도 실패하고

어쩔때는 1개 정도 실패하고

무작위로 실패하는 모습이 나타납니다.

커리할때는

PQclear() 함수를 부르고 PQexec()함수를 이용해서 SELECT문장을 실행합니다.

PQexec()의 반환 값이 NULL이고 PQresultStatus() 함수는 PGRES_FATAL_ERROR를 반환합니다.

PQerrorMessage()로 에러베시지를 표시하려고 하여도 나타나지 않습니다.

어떤 부분이 오류인지 감이 오지 않습니다.

고수님들 답변 부탁드립니다.

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

libpq 라이브러리를 만들 때, thread safe 옵션이 켜져 있어야 thread 작업에 안전합니다.


또한, libpq 문서를 잘 보면,

이 함수는 thread 작업에서 안전하지 않아요. 하는 것들이 있습니다.

그거 참고 하셔서 문제를 풀어보셔야할 것 같아요.


libpq 쪽 thread 프로그래밍을 안한지 하도 오래되어서 구체적인 도움은 못 드리겠네요.

김상기(ioseph)님이 2009-07-27 13:25에 작성한 댓글입니다.

답변 고맙습니다.
아직도 문제는 해결되지 않았지만 여러가지 시도를 해보고 있습니다.

박성진(myselp)님이 2009-07-29 09:07에 작성한 댓글입니다.

문제가 해결되었습니다.
프로그램을 잘못 구현해서 동작이 안되었던 거었습니다.
여러개의 커넥션을 생성해 놓고 여러개의 스레드에서 한개의 커넥션을 사용하고 있었더라구요.
결론적으로 스레드에서 정상작동하네요.
서버, 클라이언트 각각 2개 코어가 있는 CPU에서 해봤는데 2개의 커넥션에서 가장 효과적이라는
결론이 나왔습니다. 그런데 1개의 커넥션과 비교해서 미미한 차이여서
커넥션 풀이 정말 필요한가라는 의문이 들 정도였습니다.
그리고 희한하게 3개의 커넥션은 2개의 커넥션 보다 속도가 떨어지더라구요.
아무튼 답변해주신 김상기님 고맙습니다.

박성진(myselp)님이 2009-07-30 09:15에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8297외부접속을 허용하려면? [2]
souler
2009-07-23
7493
8296PGCluster등 DB동기화 질문입니다.살려주세요 ㅠㅠ [1]
왕곰
2009-07-23
7675
8295pg_restore 사용중 에러가 발생하였을 때 무시하는 방법? [2]
김대청
2009-07-22
7313
8294PQsetdbLogin()를 이용한 커넥션 풀 구현 시 오류 [3]
박성진
2009-07-22
6617
8293[질문]배열필드에 값저장할려면? [2]
이기자
2009-07-22
7265
8286MySQL => PostgreSQL 변경 질문 입니다. [1]
권우창
2009-07-21
6422
8273[Greenplum] 오라클 MINUS 대체 방법 [1]
강가딘
2009-07-20
7983
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다