lock과 데이터베이스에 접근하는 기능을 동시에 사용하면 시스템 성능이 떨어지는 상황이 발생할 수 있는데 그림으로 나타내면 아래와 같다. PlayerB와 PlayerC의 요청을 처리하는 쓰레드들이 오랜시간동안 대기하게 된다. 이러한 문제는 단위시간동안 요청이 많아질수록 심각한 성능저하를 야기한다.

이러한 문제가 발생한 원인은 여러 쓰레드가 데이터베이스에 접근하는 기능을 실행하려고 할 때 접근하는 코드가 연산 순서상 lock으로 형성된 임계구역에 있음으로 인한 쓰레드 대기현상이다. 즉 위 그림에서 PlayerA, PlayerB, PlayerC가 게임을 떠나 각 플레이어의 상태를 데이터베이스에 저장한다고 할 때, 처음 요청을 보낸 PlayerA의 데이터접근은 바로 실행되지만 이후에 들어오는 PlayerB, PlayerC의 쓰레드는 PlayerA의 쓰레드가 작업을 끝날 때 까지 기다려야 하고 이는 곧 자원낭비로 이어진다.
이러한 문제를 해결하는 방법은 데이터베이스에 접근하는 것을 일종의 데이터베이스 Job Queue에 위임하는 방법이다. 데이터베이스 전용 Job Queue를 DataBase Queue라고할 때 DataBase Queue에 쌓인 Request를 처리하는 쓰레드가 하나임을 보장하는것이 제일 중요하다. DataBase Queue를 적용한 구조는 아래 사진과 같다.

Job Queue의 원리와 설명은 여기를 참고하자!