MIDAS Socket Connection을 이용하여 3-tier 시스템을 구성하였는데
Client 쪽에서 잘못된 query로 인하여 hang up 될 경우 애플리케이션
서버가 동시에 hang up되어 버립니다.
잘못된 query가 time out될때까지 애플리케이션 서버는 아무짓도 안합니다.
hang up이유는 애플리케이션서버가 접수된 query를 DB SERVER에게 질의요청한후
응답이 올때까지 기다리면서 hang up 현상이 발생하는 것으로 판단됩니다.
CLIENT가 DB query시 hang up 되더라도 애플리케이션 서버가 hang up되지 않도록 할 수 있는 방법이 있습니까?
위 문제에 대한 해결책을 알려 주시면 감사하겠습니다.
참고로 저는 ms sql server 7.0을 사용하며 BDE 5.10의 native db driver 를 사용하여
DB에 접근합니다.
> MIDAS Socket Connection을 이용하여 3-tier 시스템을 구성하였는데
> Client 쪽에서 잘못된 query로 인하여 hang up 될 경우 애플리케이션
> 서버가 동시에 hang up되어 버립니다.
>
> 잘못된 query가 time out될때까지 애플리케이션 서버는 아무짓도 안합니다.
>
> hang up이유는 애플리케이션서버가 접수된 query를 DB SERVER에게 질의요청한후
> 응답이 올때까지 기다리면서 hang up 현상이 발생하는 것으로 판단됩니다.
>
> CLIENT가 DB query시 hang up 되더라도 애플리케이션 서버가 hang up되지 않도록 할 수 있는 방법이 있습니까?
>
> 위 문제에 대한 해결책을 알려 주시면 감사하겠습니다.
>
> 참고로 저는 ms sql server 7.0을 사용하며 BDE 5.10의 native db driver 를 사용하여
> DB에 접근합니다.
공포의 MIDAS...
저도 프로젝트에 MIDAS socket을 사용했는데
클라이언트수는 한 2000 명 정도 되었습니다
당연히 Application Server인 NT 는 맥을 못 추더군요...
NT서버의 작업 관리자를 이용해서 "응용프로그램"를 보시면
아마 "응답없음"으로 나올겁니다... hang up 걸린 서버 프로그램이...
이때는 어쩔 수 없이 "응답없음" 프로세스를 kill 하는 수밖에 없었습니다
그래서 "응답없음" 프로세스를 감시하여 kill 하는 프로그램을 만들었는데
이것도 근본적인 해결책은 아니었습니다
지금은 엄청 비싼 Entera 미들웨어를 사용하고 있습니다...
Windows 환경인 NT 의 멀티 프로세싱의 원리가 UNIX처럼
time sharing이 아닌 message queue와 좀 이상한 thread 를
이용하므로 클라이언트의 동시 사용자수가 한순간에 몰리게되면
"응답없음"이 발생하고 또한 질문하신것처럼 클라리언트가 Query를
잘못 사용하여 DB서버로 부터의 질의결과를 받지 못하게 되면
그것도 "응답없음"이 됩니다
혹시 kill하는 프로그램에 관심이 있으시면 아래를 참고해 보세요
하지만 아래는 NT에서 현재 수행중인 프로세스 리스트 정보만 구할 수 있고
"응답없음"을 알 수는 없는데 이것은 간단히 해당 프로세스의
원도우 핸들을 구해서 PostMessage() 를 해봐서 결과를 돌려주지
않으면 "응답없음"으로 간주하시면 됩니다
Windows 95 에서 제공하는 Toolhelp32 (Unit TlHelp32)는 NT 에서 사용할 수
없습니다
소문으로는 NT5.0 에 Toolhelp32 를 넣는다고는 하는데...
NT에서는 두가지 방법으로 프로세스 정보를 구할 수 있습니다
첫째는 레지스트리의 HKEY_PERFORMANCE_DATA 섹션을 읽는 방법인데
이것은 동적인 레지스트리라 regedit.exe 로는 볼 수 없고
그것에 맞는 레지스트리 API 를 사용해서 접근할 수 있습니다
제가 개인적으로 NT에서 프로세스 관리 프로그램을 만들때 처음에
이 방법으로 했었는데 정보를 읽는 속도가 너무 느렸습니다
이 방법보다는 아래 PSAPI.DLL 을 사용하는것을 추천합니다
두번째 방법은 PSAPI.DLL 을 이용하는 방법입니다
PSAPI.DLL 는 공식적으로 문서화 되어있지 않으며 PSAPI.DLL 이 시스템
디렉토리에 없는 NT 버전(서비스팩)도 있습니다
아래 사이트에 보시면 관련 콤포넌트와 PSAPI.DLL 이 있습니다
http://www.wilsonc.demon.co.uk/delphi.htm <-- 추천
http://www.santronics.com
http://members.tripod.com/~aldyn/ <-- HKEY_PERFORMANCE_DATA 읽기 방식