OS

[Linux] shared memory 정리하는 법

파주상남자의 오답노트 ㅣ 2025. 4. 17. 13:13

반응형

✅ 공유 메모리(shared memory) 정리

Oracle에서 shared memory는 주로 SGA (System Global Area) 중에서 Shared Pool 영역을 의미하고, 여기에 저장되는 대표적인 데이터는:

  • SQL 문 캐시
  • PL/SQL 함수/프로시저
  • 데이터 딕셔너리 캐시

메모리 사용량이 과도하거나 비효율적인 경우 flush로 강제 정리할 수 있음.


✅ flush로 shared memory 정리하는 방법

🔧 SQL 문 (수동 flush)

ALTER SYSTEM FLUSH SHARED_POOL;

📌 권한 필요

  • 이 명령은 SYSDBA 권한이 있어야 함.
  • 일반 사용자로는 수행할 수 없음.

🧠 어떤 상황에서 쓰나?

  • 오래된 SQL/PLSQL 캐시가 많고, Shared Pool이 가득 차서 새로운 SQL 캐시가 못 들어올 때
  • 메모리 관련 장애나 느려짐이 감지되었을 때 임시 대응용으로

✅ Python 또는 Shell에서 flush 하고 싶다면?

1. SQLPlus 예시 (Shell)

echo "ALTER SYSTEM FLUSH SHARED_POOL;" | sqlplus / as sysdba

2. Python cx_Oracle 예시

import cx_Oracle

conn = cx_Oracle.connect("sys/password@db as sysdba", mode=cx_Oracle.SYSDBA)
cur = conn.cursor()
cur.execute("ALTER SYSTEM FLUSH SHARED_POOL")
cur.close()
conn.close()
  • mode=cx_Oracle.SYSDBA 이걸 꼭 넣어야 as sysdba 접속 가능함.

⚠️ 주의사항

  • flush 하면 모든 공유 캐시를 제거하므로, 일시적으로 성능 저하가 발생할 수 있음
  • 프로덕션 DB에서는 신중하게 사용해야 함 (모든 SQL이 다시 hard parse를 하게 됨)
  • 자주 사용하는 건 추천하지 않음. 주로 문제 발생 시 대응용 또는 테스트/개발 환경에서 사용

🔄 대안

  • 공유 메모리 문제는 단순 flush 말고, 아래도 함께 고려:
    • SHARED_POOL_SIZE 적정하게 설정
    • 바인드 변수 활용으로 SQL 캐시 중복 줄이기
    • 불필요한 대기 상태 확인 (v$session_wait, v$sgastat 등)
반응형