본문 바로가기
서버구축 (WEB,DB)

오라클 백그라운드 프로세스 MMON 통한 메모리 사용 모니터링

by 날으는물고기 2024. 1. 19.

오라클 백그라운드 프로세스 MMON 통한 메모리 사용 모니터링

Oracle Database Administration: Oracle Database Architecture

Oracle MMON(Memory Monitor)은 Oracle 데이터베이스에서 메모리 사용을 모니터링하고 관리하는 역할을 하는 백그라운드 프로세스 중 하나입니다. MMON은 SGA(System Global Area)와 PGA(Program Global Area)의 메모리 사용을 관리하고, 불필요한 메모리 할당을 해제하거나 메모리 부족 상태를 감지하여 관리 작업을 수행합니다. 때때로 MMON이 비정상적으로 동작할 수 있으며, 이는 성능 저하나 데이터베이스의 안정성 문제를 초래할 수 있습니다.

 

MMON이 비정상 작동하는 경우에 대처하는 방법은 다양하며, 그 원인에 따라 조치 방법이 달라질 수 있습니다. 아래는 MMON 비정상 작동에 대한 구체적인 원인과 대처 방법, 예방법에 대한 몇 가지 예시입니다.

메모리 부족 또는 고갈

  • 원인: MMON이 메모리를 충분히 할당받지 못하거나 메모리 부족 상태에서 작동할 경우 발생할 수 있습니다.
  • 대처:
    • SGA 및 PGA 구성을 검토하고 필요에 따라 메모리를 조정합니다.
    • 대용량의 메모리를 사용하는 쿼리나 작업을 확인하고 최적화합니다.
    • Oracle 버전 및 패치가 최신인지 확인하고 필요한 경우 업그레이드를 수행합니다.

MMON 프로세스 재시작

  • 원인: MMON이 중단되거나 중지된 경우가 있습니다.
  • 대처:
    • MMON 프로세스를 강제로 재시작합니다.
    • 다음 SQL 명령어를 사용하여 MMON 프로세스를 강제로 시작합니다.
      ALTER SYSTEM SET "_mmon_force_start"=TRUE SCOPE=MEMORY;

Oracle 재시작

  • 원인: 데이터베이스 전체가 안정화되지 않은 경우가 있습니다.
  • 대처:
    • Oracle 데이터베이스를 재시작하여 시스템을 초기 상태로 복원합니다.
    • 재시작 전에 백업을 수행하고 관련된 응용 프로그램 및 서비스를 중지합니다.

Oracle 버그 및 패치

  • 원인: Oracle 버전 또는 패치에 버그가 있는 경우가 있습니다.
  • 대처:
    • Oracle Support에서 최신 패치 및 패치 세트를 확인하고 적용합니다.
    • Oracle 버그 트래커를 검토하여 해당 버그에 대한 정보를 확인합니다.

성능 모니터링 및 튜닝

  • 예방법:
    • 주기적으로 성능을 모니터링하고 SQL 쿼리, 세션 및 리소스 사용량을 검토합니다.
    • Oracle AWR(Automatic Workload Repository) 및 ADDM(Automatic Database Diagnostic Monitor)를 사용하여 성능 이슈를 감지하고 조치합니다.
    • 적절한 인덱스를 생성하고 SQL 쿼리를 최적화하여 자원 소모를 최소화합니다.

 

이러한 대처 및 예방법은 MMON 비정상 작동의 일반적인 원인과 대응책에 대한 몇 가지 예시일 뿐입니다. 상황에 따라 구체적인 조치가 달라질 수 있으며, 문제의 원인을 파악하기 위해 Oracle 데이터베이스 로그 및 성능 모니터링 도구를 적극적으로 활용해야 합니다.

 

Oracle 데이터베이스에 접근하여 특정 데이터를 가져오는 Python 코드를 작성하려면 cx_Oracle 패키지를 사용할 수 있습니다. 다음은 Oracle DB에 연결하여 데이터를 조회하는 기본적인 예제입니다.

  1. 먼저 cx_Oracle 패키지를 설치합니다.
  2. pip install cx_Oracle
  3. Python 코드를 작성하여 Oracle 데이터베이스에 접근하고 데이터를 가져옵니다.
import cx_Oracle

# Oracle 데이터베이스 연결 설정
dsn_tns = cx_Oracle.makedsn('your_host', 'your_port', service_name='your_service_name')
connection = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn_tns)

try:
    # 커서 생성
    cursor = connection.cursor()

    # SQL 쿼리 작성
    query = "SELECT * FROM your_table WHERE your_column = :value"

    # 쿼리 실행
    cursor.execute(query, value='your_value')

    # 결과 가져오기
    rows = cursor.fetchall()

    # 결과 출력
    for row in rows:
        print(row)

finally:
    # 커서 및 연결 닫기
    cursor.close()
    connection.close()
  1. 패키지 임포트: cx_Oracle 패키지를 사용합니다.
  2. 데이터베이스 연결 설정: cx_Oracle.makedsn을 사용하여 데이터베이스의 DSN (Data Source Name)을 설정하고, cx_Oracle.connect를 사용하여 연결합니다.
    • your_host: Oracle 데이터베이스 서버의 호스트명 또는 IP 주소.
    • your_port: Oracle 데이터베이스 서버의 포트 번호.
    • your_service_name: Oracle 데이터베이스 서비스 이름.
    • your_username: Oracle 데이터베이스 사용자 이름.
    • your_password: Oracle 데이터베이스 사용자 비밀번호.
  3. 커서 생성: connection.cursor()를 사용하여 커서를 생성합니다.
  4. SQL 쿼리 작성: 필요한 SQL 쿼리를 작성합니다. 여기서는 특정 컬럼의 값에 따라 데이터를 조회하는 예제입니다.
  5. 쿼리 실행: cursor.execute(query, value='your_value')를 사용하여 쿼리를 실행합니다.
  6. 결과 가져오기: cursor.fetchall()을 사용하여 쿼리 결과를 가져옵니다.
  7. 결과 출력: 반복문을 사용하여 결과를 출력합니다.
  8. 커서 및 연결 닫기: 작업이 끝난 후 커서와 연결을 닫아 리소스를 해제합니다.

이 코드를 사용하여 Oracle 데이터베이스에 접근하고 필요한 데이터를 가져올 수 있습니다. 필요한 경우 쿼리와 연결 설정을 수정하여 사용할 수 있습니다.

728x90

댓글