우노
[DB] Database Performance Metric 본문
데이터베이스 성능 관리가 필수적인 이유
- 효과적인 데이터베이스 성능 관리 전략은 사용자 만족도를 높이고 비용을 절감하며 모든 조직의 성공에 실질적으로 기여할 수 있습니다.
데이터베이스 성능 지표 종류
- 쿼리 성능 지표
- 데이터베이스 상태 지표
- 시스템 리소스 성능 지표
- 캐시 및 인덱스 성능 지표
- 연결 상태 지표
- 접근 경합 지표
쿼리 성능 지표
- Query Response or Latency
- 데이터베이스가 쿼리나 요청에 대해 응답하는 데 걸리는 시간을 의미합니다.
- Slow Queries
- 실행 시간이 긴 쿼리들을 의미합니다.
- Most Frequent Queries
- 가장 빈번하게 실행되는 쿼리들을 의미합니다.
- 일반적인 쿼리 성능 저하의 원인
- 비효율적인 조회
- 종종 SELECT * 와 같이, 필요한 행, 열보다 더 많은 데이터를 반환합니다.
- 다른 테이블 간 비효율적인 조인
- 전체 외부 조인, 데이터 유형이 다른 열에 대한 조인 등은 상당한 CPU 비용이 발생됩니다.
- 인덱스 문제
- 인덱스가 너무 적을 경우
- 데이터베이스는 테이블 전체를 스캔하여 원하는 결과를 찾아야하기 때문에 대량의 디스크 입/출력(I/O)이 발생하게 됩니다.
- 인덱스가 너무 많을 경우
- 데이터베이스 업데이트 및 삽입 작업 시 모든 인덱스를 업데이트해야하므로, 데이터 변경 작업의 성능 저하 발생하게 됩니다.
- 인덱스가 너무 적을 경우
- 비효율적인 조회
데이터베이스 상태 지표
- Transactions Per Second (TPS)
- 데이터베이스가 초당 처리하는 트랜잭션의 수를 의미합니다.
- Database Events
- 데이터베이스에서 발생한 이벤트(데이터베이스의 상태 변화, 작업 수행, 오류 발생 등)를 의미합니다.
시스템 리소스 성능 지표
- CPU Utilization
- 데이터베이스의 CPU 사용률을 의미합니다.
- Memory Utilization
- 데이터베이스의 Memory 사용률을 의미합니다.
- I/O Utilization
- 데이터베이스의 입출력 작업 사용률 의미합니다.
- 데이터베이스는 캐시를 통해 데이터를 메모리에 저장하여 디스크 액세스를 피하고 데이터 접근 속도를 향상시킵니다.
- I/O Utilization이 높을 경우 디스크 액세스가 빈번하게 발생하므로, 데이터베이스의 캐싱 효과가 감소할 수 있습니다.
- Disk Space Usage
- 데이터, 로그 및 인덱스 파일을 포함하여 데이터베이스 파일이 차지하고 있는 디스크 공간의 양을 의미합니다.
- 데이터베이스에는 상당한 디스크 액세스가 필요하므로, 원활한 데이터베이스 작업을 위해서는 충분한 디스크 공간을 확보하는 것이 중요합니다.
- 효율적인 디스크 사용 방법
- 활동이 많은 테이블을 분리해야 합니다.
- 활동이 많은 테이블 : 많은 수의 쿼리 실행과 데이터 변경 작업이 동시에 발생하는 테이블
- 따라서, 테이블 내부 데이터 접근 경합으로 인한 동시성 문제로 성능 저하가 초래될 수 있습니다.
- 데이터베이스와 인덱스를 서로 다른 디스크에 배치해야 합니다.
- 데이터베이스와 인덱스가 동일한 디스크에 위치할 경우, 접근 경합으로 인한 디스크 병목 현상으로 성능 저하가 초래될 수 있습니다.
- 활동이 많은 테이블을 분리해야 합니다.
캐시 및 인덱스 성능 지표
- Cache Hit Ratio
- 캐시에서 성공적으로 데이터를 찾아온 비율을 의미합니다.
- 비율이 높을수록 디스크 액세스(I/O 작업)가 적다는 의미이므로, 성능 향상에 도움이 될 수 있습니다.
- Index Hit Rate
- 인덱스를 통해 성공적으로 쿼리를 처리한 비율을 의미합니다.
- 적절한 인덱스 수를 가지고 있을 경우, 인덱스 히트 비율이 높을수록 검색 속도가 높아질 수 있습니다.
연결 상태 지표
Connection Pool Usage
- Connection Pool은 애플리케이션 초기화 시, 서버 또는 프레임워크에서 생성하는, DB와 Connection된 객체들의 모음입니다.
- 클라이언트로부터 데이터베이스 연결 요청이 오면, Pool에서 사전 연결된 Connection을 받고, 처리가 끝나면 다시 Pool로 Connection을 반납하는 구조입니다.
- 즉, Pool의 Connection을 재사용하는 구조이기 때문에, 클라이언트 요청마다 물리적으로 데이터베이스에 Connection하는 시간이 소비되지 않습니다.
- 따라서, Connection Pool Usage가 높아질수록 이미 생성된 Connection을 재사용하므로 연결 지연이 감소하고 애플리케이션의 성능이 향상될 수 있습니다.
접근 경합 지표
- Blocked Transactions
- 동일한 리소스 접근으로 인해 차단된 트랜잭션을 의미합니다.
- 일반적으로, 차단된 트랜잭션은 리소스 접근이 가능해질 때까지 차단이 지속됩니다.
- Deadlocks
- 두 개 이상의 트랜잭션이 서로 동일한 리소스의 접근을 기다리는, 교착 상태의 트랜잭션을 의미합니다.
- 시스템 성능을 유지하려면 교착 상태를 모니터링하고 해결해야 합니다.
참고
- https://blog.gitnux.com/database-performance-metrics/
- https://blog.quest.com/10-database-monitoring-metrics-to-track-for-optimal-performance/
- https://severalnines.com/blog/how-measure-database-performance/
- https://logicalread.com/best-practices-for-database-performance-monitoring/
- https://ubiq.co/analytics-blog/key-database-performance-metrics-must-track-regularly/
- https://www.virtualmetric.com/blog/guide-of-database-monitoring
- https://www.appdynamics.com/blog/engineering/top-6-database-performance-metrics-to-monitor-in-enterprise-applications/
- https://scoutapm.com/blog/database-performance-metrics
- https://linked2ev.github.io/spring/2019/08/14/Spring-3-커넥션-풀이란/
'Database > Concept' 카테고리의 다른 글
[DB] SQL과 NoSQL의 차이 (0) | 2023.07.24 |
---|---|
[DB] 행 기반 데이터베이스, 열 기반 데이터베이스란? (1) | 2023.07.13 |
Comments