PRO DBDATA

PRO DBDATA

MySQL ANALYZE TABLE 전후 실행계획

MySQL ANALYZE TABLE 전후 실행계획: 27행으로 예상한 조회가 6만 행을 읽는 이유

데이터를 대량으로 변경한 뒤 기존 조회가 느려졌다면, 인덱스가 있는지만 확인해서는 원인을 찾기 어렵습니다. 같은 인덱스를 사용하더라도 옵티마이저가 예상한 처리량과 실제 처리량이 크…

MySQL 날짜 컬럼에 함수를 쓰면 느려지는 이유

MySQL 날짜 컬럼에 DATE 함수를 쓰면 느려지는 이유: 인덱스 전체 스캔을 범위 스캔으로 바꾼 실험

특정 날짜의 주문 건수를 세는 SQL에는 WHERE DATE(created_at) = '2026-02-15' 같은 조건이 자주 쓰입니다. 날짜 컬럼에는 인덱스가 있고 실행계획에도 …

MySQL 느린 쿼리 후보 찾기

MySQL 느린 쿼리 후보 찾기: Performance Schema 실행 횟수·총 시간 분석

쿼리 지연을 조사할 때는 한 번 실행하는 데 가장 오래 걸린 SQL부터 찾기 쉽습니다. 하지만 서버 전체에서 시간을 가장 많이 쓰는 SQL은 한 번에 느린 SQL이 아니라 자주 호…

MySQL 페이지 번호가 커질수록 느려지는 이유

MySQL 페이지 번호가 커질수록 느려지는 이유: OFFSET과 키셋 페이지네이션 비교

게시판이나 주문 내역처럼 목록을 페이지 단위로 보여주는 화면에서, 1페이지는 바로 열리는데 수만 번째 페이지로 갈수록 응답이 늦어지는 경우가 있습니다. 화면에 표시되는 건수는 똑같…

MySQL 예상 행 수와 실제 행 수가 다른 이유

MySQL 예상 행 수와 실제 행 수가 다른 이유: EXPLAIN ANALYZE로 통계 확인

EXPLAIN ANALYZE 결과에서 옵티마이저는 약 1만 행을 예상했는데 실제로는 1,000행만 반환되는 경우가 있습니다. 이 차이를 보면 통계가 오래되었거나 인덱스가 잘못되었다…

MySQL DDL이 끝나지 않는 이유

MySQL DDL이 끝나지 않는 이유: Metadata Lock 대기 재현과 진단

데이터가 3행뿐인 테이블에 컬럼 하나를 추가하는데 ALTER TABLE이 끝나지 않는다면, 데이터 처리량은 원인이 아닐 가능성이 큽니다. 3행을 처리하는 데 몇십 초가 걸릴 이유가…

MySQL 잠금 대기 관계 읽는 법

MySQL 잠금 대기 관계 읽는 법: data_locks와 data_lock_waits로 차단 세션 찾기

기본 키로 한 행만 수정하는 UPDATE가 끝나지 않으면 대부분 실행계획이나 인덱스부터 확인합니다. 그런데 WHERE id = 1처럼 기본 키 동등 조건으로 한 행을 고치는 문장은…

MySQL binlog 용량 관리

MySQL binlog 용량 관리: 보관 기간 설정과 안전한 PURGE 실습

MySQL 서버의 디스크 사용량이 늘어날 때 테이블 크기만 확인하면 원인을 놓칠 수 있습니다. 데이터 변경을 기록하는 Binary Log(binlog)는 테이블과 별개로 공간을 차…

MySQL Redo Log 동적 크기 변경

MySQL innodb_redo_log_capacity 동적 변경 실험: 줄어든 플러시 1,807페이지는 어디로 갔을까

대량 UPDATE가 느리고 디스크 쓰기가 많을 때, 가장 먼저 떠오르는 대책 중 하나가 Redo Log 용량을 늘리는 것입니다. Redo 공간에 여유가 생기면 Checkpoint에…

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.