-

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

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

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

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

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

PostgreSQL 통계에 대한 무작위 고찰-1
선택도(Selectivity) PostgreSQL의 옵티마이저는 쿼리 성능을 최적화하기 위해 FROM, WHERE, JOIN과 같은 다양한 조건절의 선택도(selectivity)를 추정한다. 선택도를 추정한다는 의미는 전체 레코드 수에서 조건을 만족하는 레코드 수의 비율이 얼마나 되는지를 추정한다는 의미이다. 선택도 값에 따라 옵티마이저는 테이블을 스캔할지, 인덱스를 사용할지, 어떤 조인 순서를 택할지 등 가장 효율적인 실행 계획을 결정한다. 수학적으로는 다음과 같이 표현된다. 즉 레코드 1개가…