[초보] 오라클 11g sga 메모리 변경 문의 드립니다. 0 4 7,083

by 오뚝이 [Oracle Admin] sga sga_max_target memory_max_target memory_target asmm [2018.06.18 16:12:32]


tablespace.jpg (98,156Bytes)
wait.jpg (486,938Bytes)


안녕하세요.
개발에서 운영으로 보직 변경(?)을 해서 하루 하루가 헬~인 개발자 입니다. ㅜㅜ

온라인 쇼핑몰을 운영중입니다.
Windows Server의 총 메모리 용량은 32G인데 사용 용량은 7.2G 정도입니다.
(메모리 25Gb 정도가 놀고 있는데~ㅡㅡ)

개발자 입장에서(??) DB가 빠르진 않은데
SQL에서 범위검색, GROUP BY 등 다건의 데이터를 조회시 유독 느려지는 현상이 있습니다.
대용량 데이터는 없습니다.(100만건 이상)
주문+상품이 40만건 이하입니다.

그래서 SGA_MAX_SIZE 용량을 4G -> 16G로 늘리면 성능이 좋아질까? 싶은데요~~

DB를 잘 모르는 상태에서 진행하려니.. 불안합니다.
아래 정보 드리니 가르침 부탁드립니다.

1. 정보
  1) Server 정보
      Windows Server 2012 Standard, Microsoft Windows NT 6.2.92, b4bit

  2) Oracle 정보 (Standard)
      Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
      PL/SQL Release 11.2.0.4.0 - Production
      CORE 11.2.0.4.0 Production
      TNS for 64-bit Windows: Version 11.2.0.4.0 - Production
      NLSRTL Version 11.2.0.4.0 - Production

2. 실행 명령어 (메모리 증가)
  1) 메모리 변경
      -- 11g는 SGA_MAX_SIZE, SGA_TARGET 대신 memory_max_target, memory_target 로 설정하는게 맞나요?
      ALTER SYSTEM SET MEMORY_MAX_TARGET=16G SCOPE=SPFILE;
      ALTER SYSTEM SET MEMORY_TARGET=16G SCOPE=SPFILE;

      -- 메모리 자동 관리하도록 변경
      ALTER SYSTEM SET SGA_TARGET=0 SCOPE=SPFILE;
      ALTER SYSTEM SET PGA_AGGREGATE_TARGET=0 SCOPE=SPFILE;

  2) 오라클 재기동 절차
    (1) 리스터 종료
      C:\> lsnrctl stop

    (2) 오라클 종료
      C:\> sqlplus "/as sysdba"
      SQL> shutdown immediate

    (3) 오라클 시작
      C:\> sqlplus "/as sysdba"
      SQL> startup

    (4) 리스터 시작
      C:\> lsnrctl start

      -- 상태 확인?
      C:\> lsnrctl status
      C:\> lsnrctl services

  3) 현재 실행중인 서비스(window 서비스에서 확인)
      OracleServiceXXXXXX
      OracleMTSRecoveryService
      OracleDBConsoleXXXXXX
      OracleOraDb11g_home1TNSListener
      OracleJobSchedulerXXXXXX
      OracleVssWriterXXXXXX


3. 문의사항
  1) ASMM(Automatic Schared Memory Management), AWM(Automatic Workload Repository) 설정이 필요하나요?

  2) 위 2.번 문장으로 실행하면 될까요?

  3) 메모리 증가한다고 좋아질까요? ㅜㅜ

  4) 어떤 dba가 잠깜 서버 검점을 했는데
     Redo 로그를 처리할 수 있는 개수가 3개로 설정되어 있어 경합이 발생한다고 했었는데(로그파일 확인)
     redo 로그 처리 개수를 증가하는 방법은 어떻게 되나요?
     몇개로 증가시켜야 할까요? ㅜㅜ

4. 현재 설정된 정보 : 잘 모르니 이것 저것 다 올립니다.
  1) 영역별 메모리 확인
     select NAME, round(BYTES/1024/1024, 2)||'MB' as MEMORY from V$SGAINFO;

      NAME                              MEMORY
      ---------------------------------------------
      Fixed SGA Size                     2.18MB
      Redo Buffers                       14.16MB
      Buffer Cache Size                  784MB
      Shared Pool Size                   1344MB
      Large Pool Size                    64MB
      Java Pool Size                     48MB
      Streams Pool Size                  16MB
      Shared IO Pool Size                0MB
      Granule Size                       16MB
      Maximum SGA Size                   3488.35MB
      Startup overhead in Shared Pool    405.09MB
      Free SGA Memory Available          1216MB

  2) 라이브러리 캐쉬 쿼리 히트율
     SELECT NAMESPACE, GETS, GETHITS, GETHITRATIO FROM V$LIBRARYCACHE WHERE NAMESPACE = 'SQL AREA';

      NAMESPACE   GETS            GETHITS         GETHITRATIO
      ---------------------------------------------------------------
      SQL AREA    1349751494      1348218551      0.998864277604571

   3) 적정값 구하기(발췌 : http://clipper0317.tistory.com/1)
      SELECT * FROM V$MEMORY_TARGET_ADVICE ORDER BY MEMORY_SIZE;

      MEMORY_SIZE  MEMORY_SIZE_FACTOR   ESTD_DB_TIME   ESTD_DB_TIME_FACTOR       VERSION
      -----------------------------------------------------------------------------------
      1752         0.5                  53768377       1.2862                    0
      2628         0.75                 42347509       1.013                     0
      3504         1                    41804056       1                         0
      4380         1.25                 41804056       1                         0
      5256         1.5                  41804056       1                         0
      6132         1.75                 41804056       1                         0
      7008         2                    41804056       1                         0

 

다양한 정보를 검토 후 최적의 상태로 설정해야 겠지만

어떤 정보가 얼만큼 필요한지 모르겠네요.. ㅜㅜ

부족한 정보로 문의 글을 올려 죄송합니다.

필요한 정보가 있으면 말씀해주시면 더 올리겠습니다.

감사합니다.

 

by 파워간 [2018.06.18 18:33:11]

SGA영역을 늘린다고 빨라질거 같진 않아요.

 

group by쪽 쿼리를 손보시는게 맞는거 같아요


by 오뚝이 [2018.06.19 11:04:54]

답변 감사드립니다.

SQL 튜닝은 단계적으로 진행할 예정입니다.

프로그램 개선도 해야되서 단기간에 모두 진행하는건 힘들고

빈도수 높고 느린 SQL에 대해서만 일부 진행했습니다.

SATA HDD 디스크로 RAID10 으로 구성되어 있는데

이 영향도 있을까요?

WAITE와 TABLESPACE 추가로 올리겠습니다.


by 타락천사 [2018.06.19 09:21:02]

일반적으로 메모리 증설 하시면 성능이 나아집니다.

성능 저하 쿼리를 알고 계신다면, 실제 쿼리에 대한 성능 저하 원인을 찾아보세요 << 원인에 맞는 Action 을 취하는게 맞습니다.

Query 나 Xplan 을 분석 해보시고, 잘 안되시면 Query 나 Xplan 으로 문의 하시는게 좋겠네요 ㅇ.ㅇ

 


by 오뚝이 [2018.06.19 11:08:37]

답변 감사드립니다.

먼저 답변에 말씀 드렸는데..

프로그램 개선과 SQL 튜닝 다양한 유지보수건이 있어 단기간에 SQL 튜닝을 마무리 하기에는 힘든 상황입니다.

개발해 놓은 SQL 품질이 않좋은 편입니다.

SELECT절, WHERE절에 EXISTS만 남발해 놓았네요 ㅜㅜ

한 SQL에 수십개의 EXISTS가 있는건 처음입니다. ㅋㅋㅋㅋㅋ

500라인 SQL 재 작성하며 튜닝하는데(잘은 못하지만. ) 5시간 걸렸습니다.

이젠 꼭 필요한 부분만 수정합니다. ㅡㅡ'

개발사는 개발만 해 놓구 나갔는데.. 난감하네요

앞으로 튜닝은 길게 보고 진행할까 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입