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

FireBird Q&A
[4642] Re:Re: 답변감사합니다!! 2.5도 같은 증상입니다.
친米주의자 [powerunixer] 4880 읽음    2013-09-06 12:44
박지훈.임프 님이 쓰신 글 :
: 제가 지금 시간이 없어서.. 대충만 읽고 생각이 나서 써봅니다. 잘못 생각한 걸수도...
:
: 사용중이신 파이어버드 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를 하면 느려집니다. 친米주의자 12414 2013/09/06
4641     Re:Update를 진행 중 Select를 하면 느려집니다. 박지훈.임프 12587 2013/09/06
4642         Re:Re: 답변감사합니다!! 2.5도 같은 증상입니다. 친米주의자 4880 2013/09/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.