미스터 역마살

[SQLP] 아키텍처 기반 튜닝원리 본문

Database/ORACLE

[SQLP] 아키텍처 기반 튜닝원리

Mr. YeokMaSsal 2016. 8. 6. 18:08
728x90
반응형

1절 데이터베이스 아키텍처

  • 점점 초대용량화돼 가는 데이터베이스 환경에서 DBMS 내부 아키텍처와 SQL 수행원리에 대한 이해는 필수적이다.

  • 서버 프로세스는 사용자 프로세스와 통신하면서 사용자로부터의 각종 명령을 처리한다.

  • 백그라운드 프로세스는 Dirty 버퍼와 로그버퍼를 디스크에 기록하고 인스턴스 및 프로세스를 복구하는 등 각
    프로세스 별로 주어진 역할을 수행한다.

  • 주요 파일구조는 데이터파일, 임시데이터 파일, 로그파일로 나뉠 수 있다.

  • 메모리 구조는 시스템 공유 메모리(SGA) 와 프로세스 전용 메모리로 나뉘게 된다.

  • 시스템 공유메모리의 3대 캐시 영역, Data 캐시, Code 캐시, Log 캐시를 중심으로 데이터베이스 성능 고도화
    핵심원리를 설명할 수 있고, 데이터베이스 Call을 통해 이루어지는 작업요청 횟수를 최소화 하는 것도 주요
    성능원리 중 하나이다.

 

2SQL 파싱부하

  • 무거운 파싱 과정을 거친 SQL과 실행계획은 여러 사용자가 공유하면서 재사용 할 수 있도록 공유 메모리에
    캐싱해 둔다.

  • 공유메모리에서 SQL을 찾기위핼 사용되는 키 값은 SQL 문장 그자체 이다. 따라서 중간에 작은 글자 하나만 달라도 DBMS는 서로 다른 SQL로 인식해 실행계획을 새로 생성한다.

  • 조건절이 동적으로 생성되는 리터럴(Literal) SQL로 프로그램을 작성하면 새로운 값이 입력 될 때 마다 하드파싱을 일으켜 시스템 부하를 가중 시킨다.

  • OLTP 환경에서 SQL 파싱 부하를 최소화 하려면 반드시 바인드 변수를 사용해야 한다.

  • 바인드변수를 사용하면 옵티마이저가 컬럼 히스토그램을 활용하지 못하는 단점이 있어값의 분포가 균일하지 않은 컬럼을 조건절에서 사용할 때는 UNION ALL을 이용해 실행계획을 분기하는 방안을 고려해야 한다.

 

3절 데이터베이스 Call과 네트워크 부하

  • 데이터베이스 Call과 결과집합 전송은 네트워크를 통해 이루어지며 서버와의 Roundtrip 횟수가 많을수록 쿼리
    수행속도가 떨어지는 것은 당연하다. 따라서 데이터베이스 Call 종류와 특성을 잘 이해함으로써 그 횟수를 줄이도록 노력해야한다.

  • 루프를 돌면서 여러작업을 반복 수행하는 프로그램을 One SQL로 구현하면 큰 성능 개선효과를 얻을 수 있으며,
    그 핵심원리는 데이터베이스 Call을 줄이는데에 있다.

  • Array Processing을 잘 활용하면 데이터베이스 Call횟수를 크게 줄여줘 One SQL로 통합할때와 비슷한 수준의
    성능효과를 얻을 수 있다.


4절 데이터베이스 I/O 원리

  • 모든 DBMS에서 I/O는 블록(=페이지) 단위로 이루어진다.

  • 물리적으로 한정된 시스템 자원을 효율적으로 사용하기 위해 디스크 I/O를 최소화하고 버퍼캐시 효율을 높이는
    것이 I/O 튜닝의 목표다.

  • 네트워크 문제이든, 파일시스템 문제이든 I/O 성능에 관한 가장 확실하고 근본적인 해결책은 논리적인 블록 요청
    횟수를 최소화하는 것이다.

  • 논리적인 I/O 요청횟수를 최소화하는 것이 I/O 효율화 튜닝의 핵심 원리다. 그러기 우해서는 필요한 최소 블럭만
    읽도록
    SQL을 작성하는 것이 무엇보다 중요하다. 옵티마이저의 능력을 최대한 끌어올리기 위해서는 그만한
    옵티마이징 팩터를 제공해야 하며
    , 옵티마이저 힌트를 이용해 사용자가 직접 최적의 엑세스 경로로
    유도해야 할 때도 있다
    .



-끝-

728x90

'Database > ORACLE' 카테고리의 다른 글

[ORACLE] RAC  (0) 2016.08.08
[ORCLE] ORA-28002 오류 메세지 대처법  (0) 2016.08.07
[ORACLE] TRACE 보는 방법  (0) 2016.08.03
[ORCLE] 데이터베이스 아키텍처  (0) 2016.07.28
[ORACLE]인덱스 파티셔닝  (0) 2016.07.27
Comments