티스토리 뷰

DB

오라클 고도화

keehyun2 2016. 7. 2. 18:17

공공기관의 빅데이터를 다루면서 알게된 사항들을 정리해본다.


1. 오라클 통계정보

- 기본적으로 오라클은 통계정보를 수집하는 Job 이 auto 로 실행되어지고 있다. 그런데 이를 보통은 off 해 놓는다. 통계정보가 바뀌게 되면 이를 옵티마이저가 분석하기에 따라 실행계획이 변경되고, 조회속도의 편차가 커질 우려가 있기 때문이다. 


2. oracle hint 를 사용한 index 처리

- 오라클 실행계획(보 통 ctrl + e )을 살펴 보면 빨갛게 full scan 한다는 문구를 볼수가 있는데, 이것은 조회과정에서 index 를 사용하지 않는다는 의미이다. 

- 내 경우에는 해당 칼럼에 인덱스가 걸려 있는데도 이를 사용안하고 조회하지를 않았다. 이것은 옵티마이저가 통계정보를 지속적으로 수집하지 않아서 발생하는 경우라고 추측한다. 통계 정보를 확인해보니 3년전 통계정보 수집이 마지막이었다.

- 오라클 옵티마이저는 쿼리를 읽어서 통계정보를 기반으로 실행계획을 세우는데, 통계정보 수집이 제대로 되어 있지 않은 경우, 인덱스를 사용하지 않고 조회하여 속도가 저하된다. 

- 조회시에 사용할 인덱스를 지정하는(강제로 태우는) oracle hint 가 있는데 select 연산자 뒤에 /*+ */ 주석과 같이 붙혀서 사용한다. 주석이라서 잘못입력해도 오류는 나지 않는다. ex) /*+ index(테이블명 테이블_인덱스) */ or  /*+ index(알리아스명 테이블_인덱스) */

- 이 oracle hint 는 테스트 용도로 사용하여야지 optimizer 의 역할을 개발자가 대신하듯이 사용할 인덱스를 지정하게 되면, 이후에 성능 저하시키는 요인이 개발자 자신이 될수 있기때문에 피하는게 좋겠다. 성능저하를 옵티마이저 탓으로 돌리기 위해... 

- index 를 사용하기 위해서 통계 정보를 일시적으로 재수집하는 것을 권장한다? 


3. oracle hint 를 사용한 병렬처리 

- 속도가 느린 쿼리를 cpu 여러개를 사요하여 조회하는 방법이다. ex)select /*+ parallel(a 4) */ * from 테이블명 a order by 1 desc

- cpu 를 많이 잡아 먹어서 웬만하면 업무에 지장이 가지 않는 선에서 돌리는걸 권장한다. DB 서버에 OS 원격 접속하여 vmstat 1 이란 명령어로 1초 주기로 해당 컴퓨터의 cpu 사용량등을 확인할 수 있다. topas(aix),top(centos) 등이 명령어로 pid 등을 확인할수도 있다. 

'DB' 카테고리의 다른 글

Mysql Query log  (0) 2019.05.09
Convert sql from sybase IQ to oracle 12c  (0) 2016.09.11
ibatis log query 가독성 좋게 출력하기.  (0) 2016.06.07
mysql 계층 쿼리 정리 및 분석  (0) 2016.03.29
댓글
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크