CodeGym /행동 /SQL SELF /데이터베이스 모니터링 입문

데이터베이스 모니터링 입문

SQL SELF
레벨 45 , 레슨 0
사용 가능

상상해봐, 네가 데이터의 바다를 항해하는 배의 선장이라고. 그냥 배가 움직이기만 하면 되는 게 아니지. 네가 진짜 원하는 건, 그 배가 긴 쿼리라는 빙산에 부딪히지 않고, 갑자기 오는 락 폭풍에 당황하지 않고, 연결 과부하로 침몰하지 않게 하는 거야. 데이터베이스 모니터링은 네 레이더, 기압계, 그리고 음파탐지기야. 빙산, 폭풍, 패닉을 피하게 도와주지.

왜, 그리고 어떻게 데이터베이스를 모니터링해야 할까?

모니터링은 데이터베이스가 안정적으로 돌아가게 해주고, 문제를 미리 캐치할 수 있게 해줘. 서비스가 갑자기 죽는 대신, 미리 신호를 받는 거지: "야, 여기 쿼리가 30초째 돌고 있는데 뭔가 이상해." 어디가 막혔는지, 누가 락을 잡고 있는지, 언제쯤 리소스 부족으로 DB가 숨막힐지 미리 알 수 있어.

여기서 이런 것들에 신경 써야 해:

  • 쿼리와 트랜잭션의 액티비티. 쿼리 흐름을 교차로에서 트래픽을 보는 컨트롤러처럼 지켜봐. 어떤 SQL 커맨드가 다른 쿼리들을 느리게 만들고 있는지? 누가 DB를 제일 많이 잡아먹는지? 이런 답을 알면, 급하게 당황하지 않고 최적화할 수 있어.

  • 리소스 사용량. CPU, 램, 디스크 공간 — 이건 연료랑 배의 본체 같은 거야. 리소스 하나라도 "새거나" 과부하 걸리면, 배 전체가 멈출 수 있어. 모니터링은 어디가 과부하인지 보여주고, 부하를 나눌 수 있게 해줘.

  • 쿼리 성능. 어떤 SQL 쿼리는 까다로운 승객 같아: 너무 많은 걸 요구하고, 남들까지 느리게 만들고, 항상 불만이야. 모니터링으로 누가 제일 "욕심쟁이"인지 알 수 있어 — 인덱스 추가하거나, 쿼리 다시 짜거나, 아예 바꿔버릴 수 있지.

  • 락과 충돌. 가끔 쿼리들이 서로 충돌해: 한 쿼리가 리소스를 잡고 있고, 다른 쿼리는 그걸 기다려. 마치 누군가 문을 한쪽으로 잡아당기고, 다른 사람이 반대로 잡아당기는 것처럼. 이런 락을 모니터링하면, 제때 개입해서 긴장 풀 수 있어.

좋은 모니터링은 단순히 DB가 "살아있다"고만 알려주는 게 아니야. 어디서 문제가 생길 수 있는지 알려주고 — 진짜 문제가 터지기 전에 고칠 시간을 주지.

PostgreSQL 모니터링을 위한 핵심 메트릭

네 데이터베이스 상태를 제대로 파악하려면, 뭘 봐야 하는지 알아야 해. 이 메트릭들이 바로 DB의 "맥박"과 "혈압" 같은 거야. 여기 주요 파라미터들이 있어:

  1. 활성 연결 수.

    지금 몇 명의 유저가 연결되어 있을까? 누가 아무 생각 없이 쿼리 날리면서 네 DB를 부수려고 하는 건 아닐까? 예를 들어, pg_stat_activity는 다음 강의에서 다룰 건데, 현재 액티비티를 보여줘.

  2. 쿼리 실행 시간.

    어떤 쿼리가 제일 빨리 끝나? 반대로, 어떤 쿼리는 마치 은퇴한 것처럼 느릿느릿할까?

  3. 인덱스 사용률.

    인덱스가 있는데도 안 쓰고 있다면, 뭔가 잘못된 거야. pg_stat_user_indexes로 이걸 체크할 수 있어.

  4. 락과 충돌 수준.

    "Deadlocks"(상호 락) 방지에 널리 쓰여.

  5. CPU 부하와 메모리 사용량.

    예를 들어, PostgreSQL이 네 서버 리소스를 얼마나 "먹고" 있는지?

실제로 어떻게 보일까?

실제 예시를 보자. 특정 데이터베이스의 크기를 알 수 있는 간단한 쿼리가 있어:

SELECT pg_size_pretty(pg_database_size('네_데이터베이스_이름')) AS database_size;

이 간단한 쿼리는 DB 크기를 읽기 쉬운 포맷으로 보여줘 — 예를 들어, 243 MB나 1.2 GB처럼. 최근에 DB가 얼마나 커졌는지 빠르게 확인할 때 유용해.

모든 데이터베이스 크기를 한 번에 보고 싶다면 — 일일이 이름을 지정할 필요 없이 — 이렇게 할 수 있어:

SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size
FROM pg_database;

이건 서버에 있는 모든 DB의 개요를 보여줘 — 디스크 사용량을 체크하는 관리자에게 딱이지. "욕심쟁이" DB를 빨리 찾아내서, 호스팅 업체에서 "공간이 부족합니다"라는 메일 받기 전에 조치할 수 있어.

2
과제
SQL SELF, 레벨 45, 레슨 0
잠금
활성 연결의 개수 알아보기
활성 연결의 개수 알아보기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION