2015-11-26

대용량 데이터 베이스 솔루션 I - 응용프로그램의 최적화

대용량 데이터 베이스 솔루션 I                                                 
                                                                                               

Ch 2 응용프로그램의 최적화                                                                                                            

  > 각각의 SQL 문장을 수행하기위한 'DBMS CALL;의 부하를 줄여 수행속도의 향상을 유도한다.                                                                                                         
                                                                                                           
  >응용 프로그램 작성시의 고려사항                                                                                                         
     1. 절차형 SQL 과 저장형 프로시져 의 활용                                                                                                      
     2. 커서의 사용기준                                                                                                      
     3. 에러처리                                                                                                      
     4. 호스트 변수 와 데이터 타입                                                                                                      
                                                                                                           
  >응용 프로그램의 유형                                                                                                         
     1. 온라인 화면 조회/갱신                                                                                                      
     2. 배치 프로그램                                                                                                      
                                                                                                           
                                                                                                           
  1. 응용 프로그램 작성시의 고려사항                                                                                                          
     > 절차형 SQL 과 저장 프로시져의 활용                                                                                                      
        >>절차형 SQL 의 활용                                                                                                   
           >>>오라클은 전달된 PL/SQL 전체를 최적화하는것이 아니라 그안에 포함된 SQL 단위로 최적화를 진행한다                                                                                                
              그러므로 전체의 PL/SQL이 최적화 되어있다고는 말할수 없다.                                                                                             
                                                                                                           
           >>> 응용 프로그램의 60~90%를 SQL 이 처리할수 있도록 해야한다.                                                                                                
        >> SQL*FROMS 와 Pl/SQL                                                                                                   
                                                                                                           
        >> 클라이언트 /서버 환경에서의 Pl/SQL                                                                                                   
           >>> PL/SQL 에서는  가능한 프로그램 호스트 변수의 사용을 금하고 Pl/SQLdmlrlsmddmf 이용하여 문자,숫자,날짜를                                                                                                
              처리하는것이 통신 부하를 줄여준다.                                                                                             
                                                                                                           
        >> 저장 프로시져의 황용                                                                                                   
           1. 보안  >유저에 따른 저장 프로시져의 접근 권한 설정                                                                                                
           2. 수행속도 > 개별적인 SQL 보다 빠르다                                                                                                
           3. 메모리 할당의 감소 > 사용된 프로시져는 오라클의 공유 SQL 영역에 저장되므로 다수의 사용자에 사용될경우 크게 유리하다.                                                                                                
           4. 생산성및 통합성 > 업무규칙중 공통적이면서 서버데이터에 의존적인 부분 을 저장 프로시져화 한다면 이는 모든 프로그램에서                                                                                                 
              사용가능하고 다양한 업무 환경에 적용가능하다. > DBA의 역할                                                                                             
                                                                                                           
     > 커서(CURSOR)의 사용기준                                                                                                      
        >> 내부 커서                                                                                                    
           >>> 오라클은 SQL 문장에 대해서 무조건 내부 커서를 생성하며 이는 DECLARE /OPEN /FETCH /CLOSE 의 작업순서로 매번 실행된다.                                                                                                
              ( 단 보관 커서의 경우는 제외된다)                                                                                             
           >>> Pl/SQL에서 DECLARE 문이 없으면 내부 커서를 생성한다.                                                                                                
                                                                                                           
        >> 외부 커서                                                                                                   
           >>> 테이터를 조회하면서 여러 개의 로우가 추출되지만 그 좃건에 맞는 로우의 최대치가 몇 개인지를 안수 없다면 DELCARE 를 이용한 외부                                                                                                
              커서를 이용한다.                                                                                             
                                                                                                           
                                                                           
                                                                                                           
              위의 그림과 같이 동작하므로 이 커서가 다시 사용된다면 CLOSE 하지 말고 DECLARE에서 사용된 호스트 변수에 원하는 값을 다시                                                                                              
              부여하고  OPEN 부터 다시 수행 시킬수 있다.  DECLARE-> CLOSE 까지를 서브 루틴에 넣고 구성하는것은 엄청난 부하를 일으                                                                                             
              킬수 있다.                                                                                              
                                                                                                           
        >> DECLARE SQL 의 활용                                                                                                   
           >>> 반복연결 (LOOP SUERY ; SQL 문장을 하나씩 쪼개서 날리는것 ) : 은 조인을 했을떄 전체 처리 범위가 되도록 하는 원인이 어느한쪽에                                                                                                 
              있을때 유리해지는 방법이다,                                                                                              
                                                                                                           
           >>> JOIN SQL 의 활용                                                                                                  
              DECLARE 한후에 다시 내부에서 DECLARE / OPEN/FETCH를 이용하면 내부에서 다시 OPEN dl 발생하므로  효율이 나쁘다.                                                                                              
              SELECT .. INTO .. 는 반드시 하나의 결과를 반환하는것이 아니라. 뒤의 변수가 배열형이면 여러 개를 반환할수 있다.                                                                                             
              그 여러 개의 결과마다 DECLARE/OPEN/FETCh 과정이 반복되면 당연히 효율은 떨어진다.                                                                                             
                                                                                                           
        >> HOLD_CURSOR 의 활용(사용)                                                                                                   
           >>> 반복되는 SQL 문장에 불필요한 파싱작업을 다시 하도록 해서는 안된다.  DECLARE CURSOR 를 사용하는 외부커서는                                                                                                  
              DECLARE/OPEN /FETCH/CLOSE 문장에 의해 커서를 유지하지만 내부 커서(일반 SQL) 의 경우는  HOLD_CURSOR, RELEASE_CURSOR                                                                                             
              옵션을 지정해야만 내부커서를 보관할수 있다.                                                                                             
                                                                                                           
  % 오라클의 초기 맥스 커서 값은 10이므로 늘려주어야 한다.                                                                                                         
     EXEC ORACLE OPTION(MAXOPENCURSORS = 20);                                                                                                      
     ………………                                                                                                      
     EXEC ORACLE OPTION(HOLD_CURSOR=YES);                                                                                                      
     EXEC ORACLE OPTION(RELEASE_CURSOR=NO);                                                                                                      
     ………..LOGIC PROCESS                                                                                                      
     EXEC ORACLE OPTION(RELEASE_CURSOR=YES);                                                                                                      
                                                                                                           
     > 에러의 처리                                                                                                      
                                                                                                           
                                                                                                           

                                                                                                        

No comments:

Post a Comment