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 4830 게시물 읽기
No. 4830
동일 커넥션을 가지고 멀티 쓰레딩을 한다면...
작성자
김일형(ihkim)
작성일
2003-08-09 04:00
조회수
1,861

요즘 libpq를 가지고 주물럭 거리고 있는데요,

만일 Login시에 하나의 커넥션을 획득한다음, 그 획득한 커넥션을 가지고, 멀티쓰레딩 환경에서 마구 사용된다면 어떤 결과가 되겠습니까?

 

동시에 두 쿼리가 허용이 되지 않을까요?

Multi-thread에 안전하지 않아서, 결과가 뒤죽박죽이 될까요?

 

아시겠지만 제가 사용하는 connection은 login후에 얻어진 PGconn 구조체를 사용합니다만.... 사용자 레벨에서 lock을 걸고 실행해야 되겠습니까? 아니면, 굳이 신경쓰지 않아도, backend에서 알아서 처리해 줍니까?

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

커넥션 하나에 세션 하나가 발생합니다.

libpq에 존재하는 거의 대부분 api들이 쓰레드에 안전합니다.

api 문서를 보시면 각 항목을 설명하면서, 쓰레드에 안전하지 않은 것은 '안전하지 않다'고 분명히 언급하고 있습니다. 이놈들만 피해간다면, 멀티 쓰레드 작업에 별 문제는 없을 것입니다.

 

'쓰레드에 의해서 데이터가 꼬이는 문제'는 쓰레드 문제가 아니라, RDBMS 사용에 대한 문제입니다.

 

이 부분은 rdbms의 transaction, lock 관련 기초지식으로 풀어야할 문제입니다.

 

단지 PostgreSQL에서는 하나의 세션에서는 동시에 하나의 트랜잭션만 만들 수 있습니다. 즉, 쓰레드 1번이 begin 쿼리를 사용하고, 트랜잭션시작하고 마치기 전까지는 다른 어떠한 쓰레드에서도 트랜잭션을 사용할 수 있는 상황이 옵니다. 설령 쓰레드 1번이 사용하지 않는 테이블을 조작하려고 한다해도.

이게 PostgreSQL의 트랜잭션 부분의 치명적인 단점입니다.

 

그외의 다른 주의해야할 부분은 제가 생각하기로는 별로 없는 것 같네요.

 

쓰레드 1번이 은행 잔고를 파악하고 출금하고, 쓰레드 2번이 은행 잔고를 파악하고 출금하려고 하는데, 그 잔액문제는 어떻게 처리되는가? 뭐 이런식을 걱정하시는 것 같은데, 이것은 단일 쓰레드 다중 커넥션에서도 같은 문제입니다. libpq api들의 쓰레드 안정성과는 별개의 문제인듯.

김상기(ioseph)님이 2003-08-09 12:03에 작성한 댓글입니다.

오오오... 그렇군요... 김상기님, 매번 좋은 답변에 감사를 드립니다.

요즘 진행하고 있는 admin tool만드는 것은 대충 중요부분에 대한 기반 클래스는 많은 진척이 있었습니다.

-Remote login, logout.

-Query의 실행.

-DBMS Catalog 정보를 트리 컨트롤에 전시하는 부분,

-수행된 query 결과를 grid control에 전시하는 부분.

-SQL쿼리시 syntax highlighting부분은 거의 완성되었습니다.

 

지금까지의 기반클래스들은 소스코드 레벨에서 windows, X11, gtk, Qt 와 호환이 됩니다. 즉 재컴파일만 하면, windog와 Unix에서 작동을 합니다.

 

지금부터는 벌레좀 잡고, 슬슬 UI를 어떻게 배치할지 세부설계를 할까 합니다.

피유... 아직도 멀고 먼길이 기다리고 있군요.

 

앞으로 많은 지도편달 부탁드리겠습니다.

김일형(ihkim)님이 2003-08-12 13:24에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4833Postgresql접속하기..안되여..T.T ( c 프로그램) [7]
Kyunghoon Yeom
2003-08-11
3373
4832postgresql 오늘 처음으로 접하며...조언을 [1]
초보
2003-08-09
1447
4831PGOle 프로바이더 컴파일 해보신분? [1]
이상호
2003-08-09
1764
4830동일 커넥션을 가지고 멀티 쓰레딩을 한다면... [2]
김일형
2003-08-09
1861
4829postgres 설치시 오류.. 급합니다^^; [1]
오주환
2003-08-07
1516
4828200만건 데이터의 PostgreSQL 성능 보고 [3]
김상기
2003-08-06
3518
4826PostgreSQL 7.3.4 가 릴리즈 되었네요... [1]
이상호
2003-08-06
1519
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다