반응형
✅ 공유 메모리(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 등)
반응형
'OS' 카테고리의 다른 글
[Linux] 사용하지 않는 포트 비활성화 하는 방법 (0) | 2025.04.29 |
---|---|
[Linux] Setuid, Setgid 란? (0) | 2025.04.25 |
[Linux] Oracle Shared memory 사용률 확인 (0) | 2025.04.17 |
[Linux] history 삭제하는 방법 (0) | 2025.04.03 |
[Window] 윈도우 이벤트 로그 확인 법 (0) | 2025.03.24 |