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

FireBird Q&A
[4641] Re:Update를 진행 중 Select를 하면 느려집니다.
박지훈.임프 [cbuilder] 12587 읽음    2013-09-06 12:11
제가 지금 시간이 없어서.. 대충만 읽고 생각이 나서 써봅니다. 잘못 생각한 걸수도...

사용중이신 파이어버드 2.1 버전은 윈도우에서 멀티코어를 제대로 지원하지 않습니다.
그래서 대부분의 동작이 하나의 코어에서만 돌아갑니다.
결국 시간이 걸리는 update 작업중 select를 하면 하나의 CPU 코어에서 난리법석이 나겠지요.

시험삼아 2.5 버전에서 테스트를 해보시길 권합니다.
2.5 버전은 완전한 멀티코어 버전은 아니지만 기본적인 멀티코어 지원은 되는 것으로 알고 있습니다.
(아예 갈아엎지는 마시고, 테스트 환경을 만들어서 해보시길... ^^;;)

그럼...


친米주의자 님이 쓰신 글 :
: 4년 전 고민을 다시 올립니다.
: 아래의 글은 4년 전에 현 게시판에 올렸었습니다.
:
: - 운영체제 : WindowsXP SP3
: - 불새버전 : 2.1.2 (Super Server)
: - ZEOS버전 : 6.6.5
:
: 최근에 저희 프로그램을 BDE+불새---->ZEOS+불새로 변경했습니다.
: 변경한 이유는,
: 원래는 180개의 외부 장비에서 전화선을 통해서 넘어오는 실시간 데이터를 받아서 테이블(가칭:A)에 Update를 하는 방식였는데...장비가 240개로 늘어나는면서 BDE가 General SQL Error이 발생하는 경우가 많아서 ZEOS로 바꾸게 되었습니다. 향후 장비가 360개로 더 늘어날 계획인 관계로 9월,10월 날밤을 새면서 ZEOS로 변경했습니다.
:
: 구동 방식을 설명하면,
:
: 먼저 240개의 외부장비와 전화선을 통해서 통신을 하면서 항상 신호를 주고 받는
: 쓰레드가 240개가 생성되며,
: 이 쓰레드들은 저장할 데이터가 발생하면,
: ZeOS를 이용해서 만들어진 Connection Pool 쓰레드에 전달하며
: Connection Pool 쓰레드가 데이터를 불새에 Update합니다.
:
: 레코드는 평균 10만개 이하이며 한번 생성된 테이블에 Update가 진행되는 동안에 새로운 데이터의 입력(Insert)은 없습니다. 단지 Update만 합니다. 쓰레드당 평균 10초당 1회 정도의 속도로 Update를 합니다.
: 트랜젝션은 사용하지 않았습니다.
:
: 240개의 장비에서 넘어오는 데이터를 받아서 불새의 테이블A에 Update하는 것을 처리하는데는 아주 성공적입니다.
: 그런데 문제는 테이블A의 값을 읽어서 통계자료를 만들어 내야하는 기능의 동작이 너무 느립니다.
:
: 기존 BDE로 개발된 버전은 처음이나 나중이나 거의 2-3초 이내에 통계를 출력해 내는데...
: ZEOS로 새로 개발된 버전의 경우 통계를 출력하는데 걸리는 시간이 처음에는 0.5초가 걸리다가...프로그램 실행 10분후 2초.....30분후 10초...1시간 후  30초....2시간 후 90초 이렇게 시간이 걸립니다.
:
: 프로그램을 실행하고 작업관리자를 보면, 실행된 프로그램 및 불새의 메모리 사용량의 변화나 CPU점유률의 변화는 크게 없습니다. 물론 쓰레드 갯수, Handle 갯수 등도 초기에 실행된 상태가 10분 후, 1시간 후, 2시간 후에도 아무런 변화 없이 유지됩니다.
: 단지 통계 기능을 클릭하는 순간 CPU 점유율이 100%가 됩니다. 물론 실행 초기에야 1초 이내기 때문에 별 문제가 없지만 1시간 후에 통계기능을 클릭하면 CPU 점유율 100%가 2분 정도 지속됩니다. 물론 240개의 장비에서 데이터를 받는 240개의 쓰레드도 프리징 상황이 2분 정도 지속됩니다.
:
: 프로그램을 종료 후 재시작하면 아주 정상적으로 동작합니다. 그러다가 또 통계를 출력하는데 걸리는 시간이 처음에는 0.5초가 걸리다가...프로그램 실행 10분후 2초.....30분후 10초...1시간 후  30초....2시간 후 90초 이렇게 시간이 걸립니다.
:
: 기존 버전인 BDE로 만들어진 버전도 똑 같은 방식으로 동작하는데,
: Update를 진행 중일때,
: 통계를 말들기 위해서 Select를 하면 아무리 시간이 지나도 초기 속도와 별반 차이가 없습니다.
:
: 오늘은 구성을 쓰레드 풀을 이용해서 불새에 접속처리를 바꿨는데요
: 해결이 안되네요.
:
: 구성을 그림으로 그려보면,
:
: 장비----(전화회선)---->쓰레드----->|----------|                            |------------|
: 장비----(전화회선)---->쓰레드----->|쓰레드Pool |------ZEOS---->|   불새 2.1.3.  |
: 장비----(전화회선)---->쓰레드----->|----------|                            |------------|
:
: 이유가 뭘까요?
:
: 문제가 ZeOS의 TZQuery의 설정에 문제가 있거나 아니면 Update에 문제 있는 것 같은데요.
: BDE의 TQuery와 ZeOS의 TZQuery와 동작하는 방식이 다를까요?
:
: 고수님들의 조언을 듣고 싶습니다.

+ -

관련 글 리스트
4640 Update를 진행 중 Select를 하면 느려집니다. 친米주의자 12415 2013/09/06
4641     Re:Update를 진행 중 Select를 하면 느려집니다. 박지훈.임프 12587 2013/09/06
4642         Re:Re: 답변감사합니다!! 2.5도 같은 증상입니다. 친米주의자 4881 2013/09/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.