오늘날 데이터베이스 세계는 빠르게 AI와 ML 쪽으로 나아가고 있으며, 데이터베이스의 작업 부하가 크게 증가할 것으로 예상됩니다. 데이터베이스 관리자에게는 데이터베이스 인프라의 작업 부하를 미리 예측하고 대응할 추가적인 책임이 있을 것입니다. 데이터베이스가 확장되고 자원 관리가 점점 중요해지면서, 전통적인 용량 계획 방법은 종종 부족해지며 성능 문제와 계획되지 않은 다운타임으로 이어질 수 있습니다. 가장 널리 사용되는 오픈 소스 관계형 데이터베이스 중 하나인 PostgreSQL도 예외는 아닙니다. CPU, 메모리 및 디스크 공간에 대한 요구가 증가함에 따라 데이터베이스 관리자(DBA)는 병목 현상을 방지하고 효율성을 향상시키기 위해 선제적인 접근 방식을 채택해야 합니다.
이 기사에서는 장기 단기 기억(LSTM) 기계 학습 모델이 PostgreSQL 데이터베이스에서 자원 소비를 예측하는 데 어떻게 적용될 수 있는지 살펴보겠습니다. 이 접근 방식을 통해 DBA들은 반응적인 용량 계획에서 예측적인 용량 계획으로 전환하여 다운타임을 줄이고 자원 할당을 개선하며 과다 공급 비용을 최소화할 수 있습니다.
왜 예측적인 용량 계획이 중요한가
기계 학습을 활용함으로써 DBA들은 미래의 자원 요구를 예측하고 이에 대처하여 중요해지기 전에 문제를 해결할 수 있어 다음과 같은 결과를 낳습니다:
- 다운타임 감소: 자원 부족을 미리 감지하여 중단을 피할 수 있습니다.
- 향상된 효율성: 리소스는 실제 필요에 따라 할당되며, 과다한 공급을 방지합니다.
- 비용 절감: 클라우드 환경에서 정확한 리소스 예측은 과다한 공급 비용을 줄일 수 있습니다.
머신 러닝이 PostgreSQL 리소스 계획 최적화하는 방법
PostgreSQL 리소스 사용량을 정확히 예측하기 위해, 우리는 시계열 데이터의 시간적 패턴을 잡는 데 뛰어난 최적화된 LSTM 모델을 적용했습니다. 순환 신경망 (RNN)의 한 종류인 LSTMs는 복잡한 종속성과 순서를 이해하는 데 적합하여 PostgreSQL 환경에서 CPU, 메모리 및 디스크 사용량을 예측하는 데 이상적입니다.
방법론
데이터 수집
옵션 1
LSTM 모델을 구축하려면, 다음과 같은 다양한 PostgreSQL 시스템 서버 OS 명령어와 db 뷰에서 성능 데이터를 수집해야 합니다:
pg_stat_activity
(Postgres 데이터베이스 내 활성 연결 세부 정보),vmstat
free
df
데이터는 6개월 동안 매 수 분마다 캡처될 수 있으며, 모델 학습을 위한 포괄적인 데이터 세트를 제공합니다. 수집된 메트릭은 capacity_metrics
라는 전용 테이블에 저장될 수 있습니다.
샘플 테이블 스키마:
CREATE TABLE capacity_metrics (
time TIMESTAMPTZ PRIMARY KEY,
cpu_usage DECIMAL,
memory_usage DECIMAL,
disk_usage BIGINT,
active_connections INTEGER
);
시스템 데이터를 이력 테이블에 캡처하는 여러 가지 방법이 있습니다. 그 중 하나는 Python 스크립트를 작성하고 몇 분마다 crontab
을 통해 예약하는 것입니다.
옵션 2
유연성을 테스트하기 위해 CPU, 메모리 및 디스크 활용률 메트릭을 코드를 사용하여 생성하고 Google Colab 노트북을 사용하여 실행할 수 있습니다 (합성 데이터 생성). 이 논문 테스트 분석에서는 이 옵션을 사용했습니다. 단계는 다음 섹션에서 설명됩니다.
기계 학습 모델: 최적화된 LSTM
LSTM 모델은 시계열 데이터의 장기 의존성을 학습할 수 있는 능력으로 선택되었습니다. 성능을 향상시키기 위해 여러 가지 최적화가 적용되었습니다:
- 쌓인 LSTM 레이어: 복잡한 패턴을 캡처하기 위해 두 개의 LSTM 레이어가 쌓였습니다.
- 드롭아웃 정규화: 각 LSTM 레이어 뒤에 드롭아웃 레이어가 추가되어 오버피팅을 방지하고 일반화를 향상시켰습니다.
- 양방향 LSTM: 모델을 양방향으로 만들어 데이터의 전진 및 후진 패턴을 캡처했습니다.
- 학습률 최적화: 모델의 학습 과정을 세밀하게 조정하기 위해 학습률은 0.001로 선택되었습니다.
모델은 배치 크기가 64이고 20번의 에포크로 훈련되었으며 CPU, 메모리 및 저장소(디스크) 사용량에 대한 보이지 않는 테스트 데이터에서 성능이 측정되었습니다.
다음은 데이터 설정 및 머신 러닝 실험에 사용된 단계 요약과 Google Colab Notebook 스크린샷입니다:
단계 1: 데이터 설정 (6개월 동안 시뮬레이션된 CPU, 메모리, 디스크 사용 데이터)
단계 2: 데이터에 더 많은 변동성 추가
단계 3: 시각화나 추가 사용을 위한 DataFrame 생성
단계 4: LSTM 데이터 준비, 훈련, 예측 및 플로팅을 위한 함수
단계 5: CPU, 메모리 및 저장소용 모델 실행
결과
최적화된 LSTM 모델은 CPU, 메모리 및 디스크 사용량 예측에서 ARIMA 및 선형 회귀와 같은 전통적인 방법을 능가했습니다. 예측은 실제 리소스 사용량을 정확하게 추적하여 단기 및 장기 패턴을 효과적으로 포착했습니다.
다음은 LSTM 예측의 시각화입니다:
그림 1: 최적화된 LSTM CPU 사용량 예측
그림 2: 최적화된 LSTM 메모리 사용량 예측
그림 3: 최적화된 LSTM 디스크 사용량 예측
PostgreSQL 모니터링 도구와의 실제 통합
LSTM 모델의 유틸리티를 극대화하기 위해 PostgreSQL의 모니터링 생태계 내에서 다양한 실용적인 구현이 탐구될 수 있습니다:
- pgAdmin 통합: pgAdmin은 실제 메트릭 옆에 실시간 리소스 예측을 시각화하기 위해 확장될 수 있으며, 이를 통해 DBA들은 잠재적인 리소스 부족에 대응하기 위해 선제적으로 대응할 수 있습니다.
- Grafana 대시보드: PostgreSQL 메트릭은 Grafana와 통합되어 성능 그래프에 LSTM 예측을 오버레이할 수 있습니다. 예측된 사용량이 미리 정의된 임계값을 초과할 것으로 예상될 때 DBA에게 알림을 보내도록 경고를 구성할 수 있습니다.
- Prometheus 모니터링: Prometheus은 PostgreSQL 메트릭을 스크랩하고 LSTM 예측을 사용하여 예측된 리소스 소비에 기반한 경고, 예측 생성, 그리고 알림 설정을 할 수 있습니다.
- 클라우드 환경에서 자동 스케일링: 클라우드 호스팅된 PostgreSQL 인스턴스(예: AWS RDS, Google Cloud SQL)에서 LSTM 모델은 리소스 수요가 예측되는 증가에 기반하여 오토스케일링 서비스를 트리거할 수 있습니다.
- CI/CD 파이프라인: 머신러닝 모델은 CI/CD 파이프라인을 통해 지속적으로 새 데이터로 업데이트되고 재훈련되며 실시간으로 배포될 수 있어서, 예측이 워크로드가 진화함에 따라 정확하게 유지될 수 있습니다.
결론
LSTM 머신러닝 모델을 적용하여 CPU, 메모리 및 디스크 사용량을 예측함으로써 PostgreSQL 용량 계획을 반응적 접근 방식에서 능동적 접근 방식으로 전환할 수 있습니다. 우리의 결과는 최적화된 LSTM 모델이 정확한 예측을 제공하여 보다 효율적인 자원 관리 및 비용 절감을 가능하게 한다는 것을 보여줍니다. 이는 특히 클라우드 호스팅 환경에서 더욱 두드러집니다.
데이터베이스 생태계가 더욱 복잡해짐에 따라, 이러한 예측 도구는 자원 활용 최적화, 다운타임 방지 및 확장성을 보장하려는 DBA에게 필수적입니다. 대규모로 PostgreSQL 데이터베이스를 관리하고 있다면, 지금이 예측 용량 계획을 위한 머신러닝을 활용하고 성능 문제가 발생하기 전에 자원 관리를 최적화할 때입니다.
향후 작업
향후 개선 사항에는 다음이 포함될 수 있습니다:
- 보다 변동성이 큰 작업 부하를 처리하기 위해 추가 신경망 아키텍처(예: GRU 또는 Transformer 모델)를 실험합니다.
- 네트워크 트래픽과 저장소 최적화도 중요한 역할을 하는 다중 노드 및 분산 PostgreSQL 배포로 방법론을 확장합니다.
- 실시간 경고를 구현하고 더 자동화된 관리를 위해 PostgreSQL의 운영 스택에 예측을 추가 통합합니다.
- Oracle 데이터베이스 작업 부하 예측을 위해 Oracle 자동화된 작업 부하 저장소 (AWR) 데이터를 실험합니다.
Source:
https://dzone.com/articles/applying-machine-learning-for-predictive-capacity