반응형
1. Oracle 접속 후 SGA 조회 하여 Shared memory 조회
SELECT round((total_size - free_size) / total_size * 100, 2) AS used_percentage
FROM (
SELECT SUM(bytes) AS total_size,
SUM(CASE WHEN name = 'free memory' THEN bytes ELSE 0 END) AS free_size
FROM v$sgastat
WHERE pool = 'shared pool'
);
✅ 쿼리 설명
항목설명
v$sgastat | SGA의 각 컴포넌트 메모리 상태를 확인할 수 있는 Oracle 뷰 |
pool = 'shared pool' | 공유 풀 영역만 대상으로 조회 |
name = 'free memory' | 현재 남아있는(할당되지 않은) 메모리 |
SUM(bytes) | 공유 풀 전체 크기 |
(total_size - free_size) | 사용 중인 메모리 |
ROUND(..., 2) | 소수점 2자리까지 반올림 |
📈 출력 예시
USED_PERCENTAGE
74.63 |
2. Python 스크립트 작성하여 log로 기록 (check_sga_usage.py)
python
import cx_Oracle
from datetime import datetime
import os
# Oracle 접속 정보
USERNAME = "DB접속계정"
PASSWORD = "패스워드입력" # 실제 패스워드로 교체
DSN = "localhost/orcl" # 필요 시 변경
# 로그 디렉토리 및 파일 경로 설정
log_dir = "/var/log/sga_usage"
os.makedirs(log_dir, exist_ok=True)
log_file = os.path.join(log_dir, f"sga_usage_{datetime.now().strftime('%Y%m%d')}.log")
# 쿼리문
query = """
SELECT round((total_size - free_size) / total_size * 100, 2) AS used_percentage
FROM (
SELECT SUM(bytes) AS total_size,
SUM(CASE WHEN name = 'free memory' THEN bytes ELSE 0 END) AS free_size
FROM v$sgastat
WHERE pool = 'shared pool'
)
"""
def main():
try:
conn = cx_Oracle.connect(USERNAME, PASSWORD, DSN)
cur = conn.cursor()
cur.execute(query)
result = cur.fetchone()
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if result:
used_pct = result[0]
log_line = f"{current_time} Used SGA: {used_pct}%"
else:
log_line = f"{current_time} Query returned no result"
except Exception as e:
log_line = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} Failed: {str(e)}"
finally:
if 'cur' in locals():
cur.close()
if 'conn' in locals():
conn.close()
with open(log_file, "a") as f:
f.write(log_line + "\n")
print(log_line)
if __name__ == "__main__":
main()
반응형
'DB' 카테고리의 다른 글
[Database] shared memory 정리하는 법 (0) | 2025.04.17 |
---|---|
[Database] PGA, SGA 란? (1) | 2025.03.19 |
[Database] shared memory 란? (1) | 2025.03.19 |
[Database] UNDO, REDO 란? (0) | 2025.03.19 |
[Database] SYSDBA 란? (0) | 2025.03.19 |