-

실행계획 코스트가 동일한 경우의 tie-breaker
2026-08-11, 적절한 인덱스가 생성되어 있지만 다른 인덱스를 사용하여 DB 서버에 점차 부하를 일으키고 있는 쿼리가 있었다. 해결하고나서 보니 아주 흔한 문제이지만 원인 자체는 덜 흔한 것 같아 테스트 데이터를 통해 근본 원인과 조치 방법을 공유해보려고 한다. 아래 test 테이블에는 (user_id, user_type), (user_id, test_id) 구성의 세컨더리 인덱스가 생성되어 있다. 테스트 데이터를 생성하기 위해 프로시저를 작성하고, 50,000건의…
-

DB 에이전트를 위한 DB Perf MCP와 트리 기반의 추론 탐색
2026-04-17, 대 AI 시대에 DBA 성역을 고집하면서도 AI와 가까워지려 하는 것은 참으로 아이러니한 일이다. 데이터베이스 지식 전파에 헌신한 이들에게 AI와 나란히 서서 참배하는 상상은 왜 이 상상이 실현되려 하는가를 되묻게 만든다. 아직 성역의 언덕에서 칼을 들고 있다면 성역의 경계에서 총을 들고 있는 AI에게 총구의 방향과 총을 쏘는 방법을 알려주면서 상상과 두려움이 만들어낸 소외된 진짜 현실의…
-

PostgreSQL – pgcli named query의 불편한 동작 개선
2026-01-18, 얼마 전 pgcli의 불편한 동작을 개선했던 내용을 짧게 공유해보려고 한다. pgcli는 PostgreSQL 관리자가 많이 사용하고 있는 커맨드라인 오픈소스이다. 네임드 쿼리와 자동완성 기능이 편리해서 나름 인기있는 cli 도구이다. 이러한 pgcli에 named query quiet mode 기능을 추가했다. pgcli 사용자라면 네임드 쿼리를 유용하게 사용하고 있을텐데, 그 네임드 쿼리의 불편한 부분을 일부 개선했다. 기능을 설명하기에 앞서 먼저 네임드…
-

MySQL 쿼리 튜닝 – 페이징 쿼리의 첫 단추
2026-01-16, 최근 CPU 사용율이 70%를 넘어간 DB 인스턴스가 있어서 원인을 살펴보다가 조치 내용을 공유하면 좋을 것 같아 글을 작성한다. Performance Insights를 보면 정규화된 쿼리에 묶인, 실제로 수행된 쿼리들이 보인다. 좀 더 자세히 보면 sql handler 대기 시간이 유난히 긴 특정 쿼리가 보이는데, 해당 쿼리가 대부분의 DB 부하를 차지하고 있다는 것을 알 수 있다. 페이징 쿼리…
-

MySQL 슬로우 쿼리 로그 고찰
2025-12-04, 운영 중인 MySQL 서버의 long_query_time이 0초로 잘못 설정되어 있어서 굉장히 많은 수의 슬로우 쿼리가 로깅되고 있는 상황이라고 가정해보자. 거기에다가 QPS는 100만 이상이다. 쿼리가 점점 적체 및 지연되기 시작할 것이고, 디스크 사용량이 증가하게 될 것이다. 그리고 대부분은 그 이유의 주된 원인으로 로깅 작업에 의한 CPU 사용율과 Disk I/O 증가를 꼽을 것이다. 그런데 사실 로깅 작업은…
-

PostgreSQL 시퀀스 갭(Sequence Gap)
2025-09-19, 최근 어느 개발자분이 “PostgreSQL에서 시퀀스를 건너뛰는(jump) 현상은 언제 발생하나요?” 라는 아주 중요한 질문을 했다. 시퀀스를 건너뛰는 현상은 또 다른 말로 시퀀스 갭이라고도 하는데, DB 서버를 운영하다보면 흔히 겪게되는 현상 중 하나이다. 하지만 시퀀스 사이에 갭이 존재한다고 해서 그 모든 갭들이 시퀀스 갭이 되는 것은 아니다. 레코드가 삭제되어도 갭이 발생할 수 있고, 업데이트가 되어도 갭이…