먼저, Docker를 사용하여 PostgreSQL 14을 설치하고 설정하는 방법부터 알아봅니다.
bash
docker run --name pg14 -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres:14
위 명령어를 통해 PostgreSQL 14을 실행하고 외부에서 접속할 수 있도록 포트 매핑을 설정합니다.
pg_proctab은 PostgreSQL 데이터베이스 내에서 실행 중인 프로세스를 모니터링하는 확장 기능입니다.
아래 단계를 따라 pg_proctab을 설치하고 활용합니다.
bash
apt-get update
apt-get install -y git build-essential
bash
apt-get install -y postgresql-server-dev-14
bash
git clone https://github.com/markwkm/pg_proctab.git
cd pg_proctab
make
make install
PostgreSQL 14이 정상적으로 실행되었는지 확인하고, 데이터베이스에 접속하여 pg_proctab을 활용하는 방법을 익힙니다.
bash
service postgresql status
bash
psql -U postgres
Python을 사용하여 pg_proctab 데이터를 시각화하는 방법을 알아봅니다. 아래는 예시 코드입니다.
python
import psycopg2
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# PostgreSQL 연결 정보
conn = psycopg2.connect(
host="localhost",
database="postgres",
user="postgres",
password="postgres"
)
# 데이터베이스에서 데이터 조회
query = """
SELECT pid, comm, fullcomm, utime, stime, vsize, rss, reads, writes
FROM pg_proctab();
"""
# 데이터를 Pandas DataFrame으로 읽기
df = pd.read_sql_query(query, conn)
# 연결 종료
conn.close()
# fullcomm(pid) 형식으로 조합하여 새로운 컬럼 생성
df['fullcomm_pid'] = df['fullcomm'] + '(' + df['pid'].astype(str) + ')'
# 사이즈 오름차순으로 정렬
df_sorted = df.sort_values(by='rss')
# Seaborn을 사용한 시각화
plt.figure(figsize=(16, 12))
# RSS 메모리 사용량 막대 그래프
plt.subplot(2, 1, 1)
sns.barplot(x='fullcomm_pid', y='rss', data=df_sorted, palette='viridis')
plt.xlabel('Process Name (PID)')
plt.ylabel('RSS Memory (MB)')
plt.title('RSS Memory Usage by Process (PID)', fontsize=16)
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.tight_layout()
# VSIZE 메모리 사용량 막대 그래프
plt.subplot(2, 1, 2)
sns.barplot(x='fullcomm_pid', y='vsize', data=df_sorted, palette='viridis')
plt.xlabel('Process Name (PID)')
plt.ylabel('VSIZE Memory (MB)')
plt.title('VSIZE Memory Usage by Process (PID)', fontsize=16)
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.tight_layout()
# y 축의 값 형식 설정
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
plt.show()
이와 같은 구성으로 블로그를 작성하면, PostgreSQL 14을 Docker 컨테이너에서 설치하고 설정하는 방법부터 시작하여 pg_proctab을 사용하여 데이터베이스 내 프로세스를 모니터링하고 시각화하는 과정을 자세히 설명할 수 있습니다.