'인덱스를 잡아봐라', '쿼리의 실행 계획을 봐라'와 같이 쿼리의 실행 속도가 느리면 듣는 말이 있습니다. 하지만 저와 같은 초보 개발자들은 어디에 인덱스를 걸어야 하는지, 실행 계획을 봐도 뭐가 뭔지 잘 모를 것입니다. 그래서 오늘은 실행 계획에 대해 한 번 학습해보려 합니다. 저의 실습 환경은 MariaDB 11.2.2이며, 개념에 대한 부분은 MySQL과 혼합하여 작성해 보겠습니다. EXPLAIN EXPLAIN은 어떠한 쿼리를 실행할 것인가, 즉 실행 계획이 무엇인지 알고 싶을 때 사용하는 명령어입니다. EXPLAIN SELECT U.*, PH.*, P.*, (SELECT SUM(POINT) FROM POINT_HISTORY H WHERE H.USER_ID = U.ID) FROM USER U INN..
블로킹 (Blocking)이란? 블로킹은 하나의 트랜잭션이 락을 보유하고 있어서 다른 트랜잭션이 해당 데이터에 접근할 수 없을 때 발생합니다. 이는 데이터베이스 성능에 심각한 영향을 미칠 수 있으며, 때로는 데드락으로 발전할 수도 있습니다. 블로킹의 문제점 성능 저하 : 블로킹으로 인해 트랜잭션이 대기 상태에 빠지면, 시스템의 전체적인 처리량이 감소합니다. 데드락 : 두 개 이상의 트랜잭션이 서로 락을 기다리는 상황이 발생하면, 시스템이 더 이상 진행할 수 없게 됩니다. 블로킹 해결 방법 타임아웃 설정 : 특정 시간 동안만 락을 기다리고, 시간이 초과되면 트랜잭션을 중단시키는 방법입니다. 락의 크기 조정 : 락을 걸 때 가능한 가장 작은 데이터 단위에 걸도록 해서, 필요 이상으로 많은 데이터가 락에 걸리..
데이터베이스는 정보를 안전하게 보관하는 창고와 같습니다. 하지만 때로는 여러 사람이 동시에 같은 정보에 접근하려 할 수 있습니다. 예를 들면, 영화관에서 마지막 한 자리만 남았는데, 두 고객이 거의 동시에 그 자리를 원한다고 상상해보세요. 이런 상황에서 두 고객 모두에게 성공 메시지를 보내면 문제가 생길겁니다. 이런 혼란을 당지하기 위해서 데이터베이스 관리 시스템(DBMS)은 잠금(Lock)이라는 기술을 사용합니다. 이는 마치 한 사람만 문을 통과할 수 있도록 하는 회전문과 같은 원리로 동작하며, 데이터의 안정성과 정확성을 보장해줍니다. 락(Lock)이란? Lock이란 여러 프로세스나 스레드가 동시에 데이터나 자원에 접근하는 것을 제한하기 위한 메커니즘입니다. 이를 통해 동시성 문제를 해결하고 데이터의 ..