태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
   情  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
오라클에서 SQL명령이 내부적으로 작동하는 과정

SQL문이 내부적으로 처리되는 과정

사용자 삽입 이미지

    1. 사용자가 사용자 프로세스(SQL PLUS나 기타 응용프로그램)을 이용 SQL명령을 내림

    2. 서버프로세스에 SQL문 도착

    3. 서버프로세스는 이전에 한번 실행된적 있는지 Library cache에서 찾아본다.

        (한 문자씩 하나하나 비교한다. 즉 대소문자, 띄어쓰기에 따라 다른문장으로 인식 한다.)

    4-1. 이전에 실행된적 있다면, Library cache에서 parse-tree와 QEP를 이용하여 해당 SQL문을

           실행한다.(Parsing과정 생략)

    4-2. 이전에 실행된적 없고 처음 실행되는 것이라면 서버프로세스는 parsing(구문분석)과정을

           시작한다.

    5. 일단 Data dictionary cache의 데이터 정의, 통계정보를 이용하여 해당 SQL문이 적절한지

        (권한은 있는 사용자 인가, 테이블이 존재하는가, 속성이 존재하는가 등등) 확인하고,

        해당 데이터로 가는 최적의 방법인 QEP를 만든다.

    6, 7. parse-tree와 QEP를 만들고 그것을 Library cache에 다음을 대비하여 저장한다.

    8. parse-tree와 QEP를 이용하여 해당 SQL문을 실행하고 그 결과를 PGA에 가져온 후

       사용자프로세스에 반환한다.

    * 모든 SQL문장은 Data Buffer Cache에서 실행되고, Data Buffer Cache에 없는 데이터가 있더라도

      하드디스크의 데이터베이스에서 해당 데이터를 읽어서 Data Buffer Cache에 올린 후 작업을

      재개한다.


DML작업이 진행될 경우 내부적인 처리 과정(Insert, Update, Delete, Select)

일단 DML문의 기본적인 Parsing과정은 위와 같다. Data Buffer Cache에서 실행될때 그 과정이

DML문마다 약간의 차이가 있는데 그것은 다음과 같다.

   - Select문 : Select문의 해당 컬럼내용을 해당 테이블에서 읽어와 결과를 반환한다.

   - Update문 : Update문은 RollBack과정을 고려한 몇 가지 작업을 진행한다.

                      아래 그림과 같이 설명하겠다.

 

사용자 삽입 이미지

        1. 100을 200으로 변경한다고 할 때, 변경전 값을 Undo Block에 복사한다.(Roll back 용도)
            Undo Block는 Data Buffer Cache의 일부분 중 하나이다.

        2. 변경되기 전 값(100), 변경되기 후 값(200), 변경된곳의 주소를 Redo log buffer에 저장

        3. 마지막으로 Data Buffer Cache의 데이터를 실제로 변경하게 된다.

    - Delete문 : Update와 거의 같다.다만 3번 과정에서는 실제 데이터를 삭제하며

                     2번 Redo Log Buffer에는 변경 후 값을 비워 둔다.

    - Insert문 : Update문과 거의 같다. 다만 1번의 Undo Block에 값을 복사하는 작업이 없고,

                    Redo Log Buffer에는 변경전 값을 비어두게 된다.


   * Undo Block의 값은 하드디스크에 저장된 Data File의 Undo Segment에 저장이 된다.(Roll Back용)

   * Redo Log Buffer의 내용은 하드디스크의 Redo Log File에 저장이 된다.

   * Commit시에는 Redo Log Buffer의 내용을 해당 트랜젝션 번호와 함께 하드디스크의

     Redo Log File에 저장하며, commit된 트랜젝션 번호를 따로 저장해둔다.



by thankee from tistory.com

신고
Tag : , ,
Commented by Favicon of http://imsosorrybutiloveu.tistory.com BlogIcon 되면한다 at 2008.03.04 14:37 신고  r x
오 알기 쉽게 정리하셨네요 고맙습니다^^
Commented by Favicon of http://up730.tistory.com BlogIcon 롱티* at 2009.10.12 18:23 신고  r x
ㅇㅇ 이해가 쉽네요

name    password    homepage
 hidden


 Category
분류 전체보기 (95)
Netwrok & Security (6)
Web Development (61)
Database (5)
Framework (6)
Others (17)
About (0)
 TAGS
SourceSafe2005 ebnf 영국 인턴쉽 PHP 강좌 ASP.NET ajax 오라클 구조 Silverlight XML linux WCF mantis bug tracker smarty mantis exception UpdateProgress web tier 리눅스 DTD 영국 홈스테이 php data tier Blog API ATRIX MS SQL Server 영국 학원 ASP 자바스크립트 ie6 자바스크립트 버그 오라클 특수문자 class id 차이 application error #401 RFC 4180 SourceSafe Internet id name 차이 maxRecievedMessageSize c#.net LiveMail It's me
 Calendar
«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
 Visitor Statistics
Total : 251,720
Today : 49
Yesterday : 124
rss
 

티스토리 툴바