C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[58330] Re:MySQL, TSQLConnection 질문
civilian [civilian] 1353 읽음    2009-09-02 11:38
MySQL이 Thread-Safe 하지 않아서 발생하는 문제입니다.

locke 님이 쓰신 글 :
: db서버는 리눅스에서 mysql을 쓰구요. (버전은 모르겠음)
:
: 소켓서버(windows환경)는 클라이언트의 요청에 따라 mysql서버에 쿼리를 처리하여 결과값을 클라이언트에게 돌려주는 기능을 합니다.
:
: c++빌더 6상에서 TSQLConnection을 사용하여 db에 접속하여 쿼리를 가져오는데요.
:
: 동시접속 테스트를 하느라 동시에 100~500개의 커넥션을 소켓서버에 일괄로 연결해서
:
: 테스트를 하고있는데 -이전에도 비슷한 글을 올렸습니다만-
:
: 문제가 이거거든요. 서버쪽에 TSQLQuery::Open() 명령어를 통해서 어떤 쿼리를 동작중일때
:
: 다른 클라이언트 커넥션 스레드에서 쿼리를 동시에 서버로 날리면 db쪽에서 에러가 납니다. 결과적으로는 Access Violation이 나오는데
:
: 혹시나 싶어서 TCriticalSection을 사용하여 하나의 쿼리작업이 끝날때까지 다른 스레드가 대기하도록 처리하면
:
: 아무 에러가 없습니다. 물론 서버에 접속한 클라이언트 커넥션은 한 SQLConnection에 물려서 db를 처리하구요.
:
: TSQLQuery는 각 커넥션이 소켓에 들어오면 쿼리를 할 때만 동적으로 그때그때 생성해서 SQLConnection에 작업을 수행하므로 각각의 스레드가 sqlquery의 공유위반으로 access violation이 걸릴 이유는 없습니다.
:
: 혹시나 싶어서 SQLConnection을 복수개의 커넥션 풀(10개 이상의 db커넥션을 미리 만들어놓음)을 만들어서 분배해줘도 동일한 오류가 납니다. CriticalSection을 쓰면 오류는 안나는데..이렇게 되면 복수개의 커넥션 풀을 만들어도 한 쿼리가 끝날때까지 다른 애들은 기다려야되니까 DB Connection 풀링의 의미가 없어집니다.
:
: 이게 mysql이라 그런건지.. 아니면 c++빌더의 sqlconnection의 성능결함인지를 모르겠어요.
:
: 예전에 oracle이나 mssql을 쓸때는 이런 문제가 없었거든요.
:
: 혹시 mysql이나 tsqlconnection을 즐겨 쓰시는 분중에 해답을 알고계신 분 계시면 좀 설명좀 해주세요.
:
: c빌더상에서 mysql을 접속하는 db컴포넌트를 바꿔야 되는건지..아니면 db자체를 mysql에서 oracle이나 mssql로 바꿔야되는지요..
:
: -locke

+ -

관련 글 리스트
58329 MySQL, TSQLConnection 질문 locke 1823 2009/09/02
58330     Re:MySQL, TSQLConnection 질문 civilian 1353 2009/09/02
58723         Re:Re:MySQL, TSQLConnection 질문 locke 1121 2009/10/07
58724             Re:Re:Re:MySQL, TSQLConnection 질문 civilian 1307 2009/10/07
58332         Re:Re:MySQL, TSQLConnection 질문 locke 1238 2009/09/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.