1.2 SQL 공유 및 재사용

개발자 로그·2021년 5월 25일
0

친절한SQL튜닝

목록 보기
3/15

Hard Parsing & Soft Parsing

오라클 메모리영역(SGA) / 데이터데이스영역 있음

sql날릴때 최적화된 실행계획이 library cache영역에 저장되어 사용하게됨.

sql파싱 : syntax체크 → semantic(권한, 존재여부)체크 → library cache영역 저장되어있는 정보가 있는지 확인 ( 예전에 같은 sql을 실행한적이 있고 거기에 최적화된 실행계획이 저징되어있다면 캐시영역에서 꺼내서 사용하고 끝) → 없다면 옵티마이저에서 최적화된 실행계획을 계산하여 사용 → Row-source generation ( sql엔진이 해석할 수 있는 언어로 변환 ) → 실행

Hard Parsing

  • SQL을 캐시에서 찾는데 실패해 옵티마이저에 의해 최적화를 하고 Row-source generation후 실행되는 것
  • CPU를 많이 소비하며 성능이 더 안좋음

Soft Parsing

  • library cache에서 바로 꺼내서 사용하는 것

  • 같은 쿼리 더라도 줄바꿈, 대소문자, 공백에 변화가 있는경우에 완전 다른 sql로 간주하므로 완벽하게 똑같은 텍스트로 sql을 짜는것이 중요함
    ( 데이터베이스는 sql문장을 키값으로 인식함 )

  • 동적인 쿼리를 날릴때에도 바인드 변수를 사용하면 됨. 바인드 변수를 제외한 나머지 쿼리를 파싱 한 다음 마지막에 바인드 변수를 적용하게되므로 가능.


바인드 변수

이름없는 SQL

  • SQL은 이름이 없어, 전테 SQL텍스트가 이름 역할을 한다
  • 따라서, 텍스트 중 작은 부분이라도 수정되면 그 순간 다른 객체가 새로 생성되는 구조이다.

공유가능 SQL

  • 의미가 같지만 텍스트가 다른 SQL은 실행할 때 각각 최적화를 실행하고 라이브러리 캐시에서 별도 공간을 사용한다.
  • 바인드 변수로 변수처리를 해주는 경우에는 SQL에 대한 하드 파싱은 최초 한번만 일어나고, 캐싱된 SQL을 사용하게 된다.
profile
성장하는 개발자

0개의 댓글

관련 채용 정보