본문 바로가기

DB/MySQL5

인덱스를 사용하는 이유와 트레이드 오프 인덱스 인덱스는 여러 가지 방식에서 사용될 수 있다. 예를 들어, 락 관점에서 보면 인덱스가 걸려있지 않은 테이블로 WHERE 조건 검색을 하면 전체 레코드가 락이 걸리는 반면 인덱스를 통해 WHERE 조건 검색을 하면 해당 레코드만 락을 걸어 락을 최소화할 수 있다. 또한 테이블 전체 파일을 읽기 보다는 상대적으로 작은 인덱스 파일을 읽어 더 빠르게 조회를 할 수 있다. 이러한 여러 가지 장점이 있는 인덱스에 대해 알아보고, 인덱스를 사용하는 대신 그에 따른 트레이드 오프가 무엇이 있을지 살펴보자. 인덱스의 데이터 저장방식(알고리즘) 데이터 저장방식(알고리즘)별로 구분할 경우 상당히 많은 분류가 가능하지만 대표적으로 B-Tree 인덱스와 Hash 인덱스로 구분할 수 있다. B-Tree 알고리즘은 가장 .. 2023. 11. 28.
MySQL 데드락 자동 감지 및 비활성화 시 대응 데드락 데드락(Deadlock)은 데이터베이스에서 여러 트랜잭션이 서로가 가진 잠금을 기다리면서 무한정 대기하게 되어 데이터베이스의 작업이 더 이상 진행되지 않는 상황을 의미한다. 멀티 스레드(Multi-threaded) 어플리케이션에서 발생하는 데드락은 해당 어플리케이션을 완전히 멈추게 해버리기 때문에 위험하다. 따라서 데드락이 발생하면 어떻게 대응할 수 있을지를 알아야 한다. 데드락이 발생하면 어플리케이션 단에서 커넥션을 계속 물고 있고, 클라이언트 입장에서는 5초 동안 응답이 안오면 재시도할 가능성이 높다. 그러면 똑같은 레코드에 똑같은 이유로 데드락이 걸릴 확률이 높고, 커넥션 풀의 커넥션이 점점 부족해지는 문제가 발생할 가능성이 높아진다. 실제 데드락 상황이 아닐지라도 락에 대한 대기시간이 설정.. 2023. 11. 21.
슬로우 쿼리 로그(Slow Query Log) 슬로우 쿼리 로그(Slow Query Log) 슬로우 쿼리 로그는 데이터베이스 시스템에서 실행 속도가 느린 쿼리를 식별하고 기록하는 로그 시스템을 말한다. 슬로우 쿼리 로그는 다음과 같은 상황에서 사용된다. 성능 튜닝: 데이터베이스의 성능을 향상시키기 위해 느린 쿼리를 식별하고 최적화할 때 사용된다. 문제 진단: 어떤 쿼리가 성능 이슈를 일으키는지 파악하여 해결하는데 도움이 된다. 시스템 감지: 데이터베이스 시스템을 지속적으로 감시하여 성능 저하를 미리 감지할 수 있다. 보통 DBMS의 설정에서 이를 활성화하고 관련된 옵션을 구성할 수 있다. 설정 slow_query_log 시스템 변수를 통해서 on/off할 수 있고, slow_query_log_file 시스템 변수는 슬로우 쿼리 로그 파일 경로를 나타.. 2023. 11. 14.
트랜잭션과 잠금 트랜잭션과 잠금 트랜잭션 트랜잭션은 꼭 여러 개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념은 아니다. 트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나(COMMIT을 실행했을 때) 아무것도 적용되지 않아야(ROLLBACK 또는 트랜잭션을 ROLLBACK시키는 오류가 발생했을 때)함을 보장해 주는 것이다. MyISAM이나 MEMORY 스토리지 엔진처럼 부분 업데이트 현상이 발생하면 실패한 쿼리로 인해 남은 레코드를 다시 삭제하는 재처리 작업이 필요할 수 있다. 따라서 InnoDB 스토리지 엔진이 지원하는 트랜잭션 기능은 애플리케이션 개발에서 고민해야 할 문제를 줄여주는 아주 필수적인 DBMS의 기능이라.. 2023. 11. 4.
MySQL 아키텍처 MySQL 아키텍처 MySQL 서버는 사람의 머리 역할을 담당하는 MySQL 엔진과 손발 역할을 담당하는 스토리지 엔진으로 구분할 수 있다. 그리고 스토리지 엔진은 핸들러 API를 만족하면 누구든 스토리지 엔진을 구현해서 MySQL 서버에 추가해서 사용할 수 있다. 즉, MySQL 서버에서 MySQL 엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있다. MySQL 엔진 MySQL엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룬다. 또한 MySQL은 표준 SQL(ANSI SQL) 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS와 호환되어 실행될 수 있다. MySQL 엔진은.. 2023. 10. 24.