얼음꽃의 일지

[JS] sequelize 에서 발생하는 오류 4가지 본문

잡다한 지식

[JS] sequelize 에서 발생하는 오류 4가지

얼음꽃 2023. 12. 13. 18:02
728x90

보통 sequelize 오류는 여러가지 종류가 있지만 그 중 보통 일어나는 오류를 얘기하려고 합니다.

 

1. ConnectionAcquireTimeoutError [SequelizeConnectionAcquireTimeoutError]: Operation timeout

-> 연결하고자 하는 값이 없을 때 생깁니다. 보통 pool에서 빼와야하는데 가져올 수 없는 경우 발생합니다. 그렇다고, 막무가내로 pool 개수를 늘리는 방법도 좋지는 않습니다. 어디서 연결을 많이 잡아먹는지를 체크 해봐야합니다.

 

2. Lock Wait Timeout Exceeded Try Restarting Transaction

-> 앞에서 사용하고 있는 transaction이 lock을 걸어서 사용하고 있는데 그 시간이 너무 길어서 뒤에서 대기 중이던 값이 타임아웃이 되어 발생하는 경우입니다. 이런경우는 보통 transaction을 오래 잡는 이유를 찾아서 짧게 만들어야합니다.

 

3. Deadlock found when trying to get lock; try restarting transaction

-> update나 delete를 하게 되는 경우 lock 건 상태로 진행하게 되는데 한쪽에서 a,b 테이블을 a,b 순으로 lock걸고 update 하는 동안 다른 곳에서 b,a 순으로 lock을 걸고 update를 진행하게되면 나중에 시작한 테이블은 위에가 끝날때까지 건들수 없기때문에 이도저도 못하는 상황이 생겨서 deadlock 이 생깁니다. 이런경우는 겹치지 않거나 방식차이로 인해 deadlock를 처리해야 할듯합니다.

 

4. Can't add new command when connection is in closed state

-> 이 경우는 위에서 진행하는 값이 오래 진행되거나 갑자기 끝나는 경우 발생 시 거기에 다시 쿼리를 날리는 경우가 생기면 이미 끝난 값에 쿼리를 날리기에 오류가 발생합니다. 이 에러가 뜨면 보통 4가지 중 하나가 나올 수 있습니다.

 

 transaction cannot be commited back because it has been finished with state: commit

-> 커밋됐는데 또 커밋요청

 transaction cannot be rolled back because it has been finished with state: commit

-> 롤백됐는데 또 커밋요청

 transaction cannot be commited back because it has been finished with state: rollback

-> 커밋됐는데 또 롤백요청

 transaction cannot be rolled back because it has been finished with state: rollback

-> 롤백됐는데 또 롤백요청

 

이런 경우에는 갑작스럽게 끝나는 경우(ex) 외부 api 연결) 를 고려하여 그런 경우가 발생하게되면 exception으로 빠질 수 있도록 해야합니다.

 

 

728x90