Informix 상에서 ESQL/C로 프로그램을 작성하다가 발생한
문제에 대해서 질문드립니다.
질문 사항은 아래와 같습니다.
1. 유닉스 상에서 서버 프로그램이 돌고 있다가 클라이언트가 보내온
정보에 따라 DB의 내용을 수정해 주는 프로그램입니다.
그런데 DB를 처리함에 있어서 접속하는 클라이언트가 조금의
시간을 두고 접속해서 DB에 대한 처리를 요구하면 별다른 문제가 발생하
지 않았는데 만약 최대 120개에서 180개의 프로세스가 동시에 접속해서
DB에 대한 같은 처리를 요구하면 에러가 발생해서 아래와 같은 방법으로
lock을 설정해 주었습니다.
EXEC SQL begin work;
EXEC SQL set lock mode to wait;
EXEC SQL set lock table 테이블명 in exclusive mode;
위의 방식으로 처리했더니 별다른 문제가 발생하지 않았습니다.
그런데 위의 문장들의 정확한 의미를 알수가 없습니다.
첫문장은 트랜잭션을 설정하기 위한 문장이고 두번째 문장은 lock mode
를 설정해 주는 문장이고 마지막 문장은 사용하는 테이블에 lock을 설정
하는 문장인것은 알고 있습니다.
그렇다면 만약 120개의 프로세스가 동시에 접속해서 똑같은 처리를 요구
할 때 120개의 프로세스 중에서 한 프로세스가 위의 문장을 수행하고
다음 절차를 수행하고 있는 동안 다른 프로세스들은 어떻게 해서 lock이
설정되는 것인지 알고 싶습니다.
즉 다시 말하자면 이미 트랜잭션이 걸려 있으면 다른 프로세스들은
트랜잭션을 수행하지 못하므로 위의 문장 중에서 첫 문장만으로도
lock이 설정되는 것인지 아니면 두번째 문장에서 lock mode가 설정
되어 있으므로 다른 프로세스들은 lock mode가 해제될 때 까지
계속 대기 상태에 있는 것인지 만약 그렇다면 실제로 세번째 문장을
실행할 필요가 없이 두 번째 문장 만으로도 lock 이 설정되기 때문에
세번째 문장을 실행할 필요가 없는 것입니까
그것도 아니라면 실제 lock은 세번째 문장에서 설정되는데 이미 한 프로
세스가 lock을 설정했기 때문에 다른 프로세스들은 두 번째 문장에 의해
서 lock이 해제 될 때 까지 대기 상태에 있는 것인지 궁금합니다.
2. 트랜잭션에 대한 정확한 의미를 알고 싶습니다. 트랜잭션이란 것이
lock의 의미도 포함하고 있는 것인지.. 그리고 만일 같은 작업을 요구할
때 한 프로세스나 프로그램이 이미 트랜잭션을 설정해 놓았다면
다른 프로세스나 프로그램은 트랜잭션 안에서 사용되는 테이블이
같은 경우 그 테이블에 트랜잭션을 설정하지 못하는 것인지..
그리고 테이블도 사용하지 못하는 것인지 알고 싶습니다...
질문이 너무 장황한가요..
고수님들의 답변 부탁드리겠습니다.
그럼 ^^
|