DATOR


튜닝-OLTP에서 전체적인 I/O을 줄일수 있는 방안-1

OLTP환경에서 튜닝으로 프로젝트에 투입이 되었을 경우에 실제 결과 트레이스는 좋아 졌지만
위의 책임자 혹은 고객은 실제로 빨라 졌는지 혹은 안정화가 되었는지 잘 모르겠다고 하는 경우가 종종 있다.

 

수치적으로 좋아 졌다고 하지만 고객의 입장에서 느끼지 못하면 다음번 튜닝 프로젝에 다시 요청 하는 경우가 없다고 봐야 한다.

그러면 일반적은 튜닝 방법을 하더라고  고객을 만족시키는 것을 하려면 어떻게 해야 할까?

 

고객이 만족하는 튜닝의 핵심 포인트

1. 제일 많이 사용하는 부분(로그인,메뉴리스트,메뉴 보는 부분)을 핵심 튜닝한다

- 해당 부분의 SQL을 보면 대부분 0.001초로 끝나서 사실 튜닝 할 것이 없다고 생각을 한다.

예를 들면
 SELECT  USER_ID
        ,USER_NAME
        ,SESSION_ID
   FROM 사용자테이블
  WHERE USER_ID = :사용자ID
   AND PASSWD  = :패스워드;
    
해당 SQL의 PLAN을 보면

Execution Plan  
---------------------------------------------------
 SELECT STATEMENT Hint=RULE
   TABLE ACCESS BY INDEX ROWID OF '사용자테이블'
     INDEX UNIQUE SCAN OF '사용자테이블_PK'  (UNIQUE)
    
==>0.001초에 수행됨.

딱 보기에는 아 튜닝할것이 없구나라고 생각할수 있다..그러나 이건 판단 미스이다.

하루에 엄청나게 많이 수행이 되는 부분은 0.001초를 0.000001초로 변경을 하면 전체적인 CPU및 I/O가 내려가게 되어 있고 그리고 사용자들이 접속했을때 빠르다고 느낄수가 있다.

 

해당 부분은 인덱스를 추가한다.

CREATE UNIQUE INDEX 인덱스명 ON 사용자테이블(USER_ID,PASSWD,USER_NAME,SESSION_ID);

즉 인덱스만 스캔 하도록 유도를 한다.

 

어찌 보면 불필요한 인덱스를 생성하는것 처럼 보이나 튜닝의 포인트는 I/O을 줄이는 것이고
액션 엔터티의 데이터의 인덱스를 생성하는 것이 아니고 마스트 크게 증가하지 않는 곳의 인덱스를 생성하는 것이기
때문에 비용대기 효과는 엄청 나다.

 

 

몇년전 롯데XX라는 곳에 긴급 튜닝을 나간적이 있다.
주말만 되면 CPU가 항상 100%에 가고 평일 되면 다시 50%로 떨어진다고 한다.
원인도 모르겠고 담당자들은 답답해 하고 있었다.

투입된 한시간 만에 해결을 하고 주말 CPU가 40% 안쪽으로 떨어졌다.

담당자는 놀랍고 고마워서 할말이 없다고 한다.

 

어떻게 했을까? 무슨 마술도 아니고...

아래에 답이 ^^

 

 

 

 

 

 

 

 

 

 

 

 

 

롯데XX라는 곳은 주말만 되면 고객이 엄청 몰리는 곳이었다.

항상 상품을 구입할때마다 해당 가격을 구해오는 부분을 가장 많이 사용했는데..

예를 들면

SELECT 상품코드
       ,상품명
       ,단가
       ,제조명
       ,바코드
  FROM 상품
  WHERE 바코드 = :바코드
         
해당 SQL의 수행 결과도 0.1초만에 결과가 나왔다.

해당 부분에 인덱스를 하나 추가...

바코드+상품코드+상품명+단가+제조명 으로 유니크 인덱스를 생성한다.
즉 인덱스만 스캔하도록 유도.테이블로 가는 RANDOM I/O 없앤다.

0.1초를 0.0000001초로 결과가 나온다.


즉 고객이 가장 많이 사용 하는 부분을 집중적으로 튜닝을 해 한다.


2.근복적인 튜닝은 모든 테이블의 액세스 패스를 조사해서 해야하는것이 당연한 방법임

위의 1번의 방법은 긴급 튜닝의 하나의 방법인것을 염두해야 합니다.

고객이 만족하지 않으면 아무리 수치가 좋아도 의미가 없으니 혹 튜닝을 나가면
1번 방법을 잘 활용 하시기를 바랍니다.

 

 

Tag

Leave Comments