테이블 LOCK 걸리는 현상 조언 부탁드립니다!! 0 3 2,401

by 튼실맨 [DB 모델링/설계] lock 디비 [2023.07.20 12:11:25]


음.. 회사에서 LMS 솔루션 프로젝트를 진행중입니다.

헌데 운영서버에서 테이블 락이 걸려버려서 오류가 발생해 재기동으로 1차적으로 해결하긴 했습니다. 찾아보니 락 관련 문제는 대부분 로직이 잘못됐다는 의견이 많아서 

제가 처음부터 시작한 프로젝트가 아니라 구조는 다 파악을 못 했습니다.

앞으로도 이런 오류가 발생할 확률이 매우 크다고 판단 해 오류를 좀 살펴봤는데, 확실치는 않지만 데이터를 INSERT 할 때 

1. courseBean.courseApply(dto);
2. courseBean.courseApplyLect(dto);
3. courseBean.courseApplyTsk(dto);
4. courseBean.courseApplyTst(dto);

이런식으로 4번 데이터를 저장하는데 이 부분에서 데이터를 저장할 때 A 쓰레드가 1번 쿼리를 실행하고 있는데, B 쓰레드가 A 쓰레드가 아직 작업이 안 끝났는데도 불구하고,

같은 테이블에 저장을 하려 해서 락이 걸려버린것 같습니다.

여기서 질문이 예를들어

A. 사용자가 버튼을 클릭했는데 개인의 네트워크적인 문제로 로딩이 길어져서 버튼을 계속해서 눌렀을 경우 락이 발생할 수 있는지

B. 데이터를 저장 할 때 INSERT INTO ( ~ ) VALUE( SELECT ~) 이런식으로 INSERT 구문 VALUE 값에서 바로 SELECT해와서 데이터를 저장하는데 

이 경우 SELECT 를 먼저 해오고 그 다음에 INSERT를 해서 순차적으로 진행하여 오류를 잡아내는게 나을까요

C. 다른 프로젝트에서는 같은 구조지만 이런 오류는 발생한 적이 없습니다. 유독 이 프로젝트에서만 락이 발생되는데 단순 네트워크 문제인지 궁금합니다.

 

 

by 튼실맨 [2023.07.20 12:12:35]

추가로 디비가 설치되어 있는 서버와 웹서버가 다른 서버입니다. 이것도 문제가 될까요?


by pajama [2023.07.20 20:31:13]

lock을 유발하는 쿼리가 있고 더이상 성능 개선이 어렵다면 lock timeout을 늘리는 것도 방법일 듯 합니다.


by 우리집아찌 [2023.07.21 09:50:09]

insert 문제면 시퀀스 ..

update 문제면 select for update

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입