'DBMS 구조'에 해당되는 글 2건

  1. 2008.09.17 Oracle - DBMS 구조

Oracle - DBMS 구조

|

오라클에는 보통 이런 파일로 구성된다.


C:\oracle\oradata\ORCL/ ~CTL : Control File
C:\oracle\oradata\ORCL/ ~DBF : Data File
C:\oracle\oradata\ORCL/ ~LOG : Redo Log File

C:\oracle\admin\ORCL\pfile/ init~ : Parameter File

C:\oracle\ora92\database/ PWDORCL : Password File


 

cache : 캐시란 데이터를 임시로 저장해두는 장소를 말한다.

buffer : 버퍼는 속도 차이가 있는 하드웨어 장치들





 

서버에서 확보한 메모리공간 : S.G.A(SERVER(SHARED.GLOBAL.AREA)


오라클 인스턴스 = SGA + 5가지 필수 B.P(BACKGROUND PROCESS) -->Instance명

                                                                                                 -->SID(system.identify)

                                                                                                 -->서비스명 =>ORCL

      

SGA 3가지로 나뉜다. 


 Shared Pool - Library Cache , Data Dictionary Cache

                        (Library Cache : SQL, PL-SQL,실행계획 보관장소)

 Data Buffer Cache

 Redo Log Buffer

 



USER Process와 SERVER Process의 Communication Path를 Connect라고 한다.


SERVER가 S.G.A 의 인스턴스로 접근가능해진 상태를 SESSION이 수립되었다고 한다.


Connect가되고 Session이 수립되면


전용으로 받게되는 P.G.A라는 전용 메모리 공간이 생긴다. (Private(Program) Gloval Area)

 

P.G.A 영역

    - Session Information : 세션을 유지하는데 필요한 정보

    - Cursor State : 명시적 암시적 커서들의 상태들

    - Stack Spack : 메모리 영역

    - Sort Area : 정렬이 실제적으로 일어나는 장소


다른 USER가 접속할시에는 P.G.A가 각각 다르다.


이 상태까지가 되면   SQL>_ 커서가 깜빡거리는 상태가 된다.




Library Cache

사용자의 SQL문장과 실행 문장을 보관함으로 나중에 같은 SQL문을 쓰면

파싱하지않고 사용하여 성능의 향상을 기대할수 있다.


SQL문의 처리순서 


0 .  기존에 사용한 적이 있는지 검사

     같은 SQL문을 쓰면 더욱 빨리 처리된다.

     사용자의 SQL문을 아스크코드로 환산하고 Hash Function으로 변환

   

(Shared pool)

1 .parsing -> Syntax cheak (select, where, from)등등이 맞는지 검사를 한다.

               -> Privilege Cheak

               -> Semantics Cheak

               -> parse tree

               -> execution plan <- 실행 계획을 작성한다. optimizer (실행단계)

                                              다음에 다시 사용하기위해 Libary cache에 등록


2 .Binding


3 .Execute


4 .Fetch (SELECT문만)





동일한 문장 - 1 . 대소문자 동일해야 한다.


     A                           B

------------------------------

 SELECT                 select

* FROM                   * from

   EMP;                     emp;


두문장은 틀리다.

아스키코드로 변환함으로 대소문자가 다르면 다른 문장



동일한 문장 - 2 . Schema 동일해야 한다.


    A                           B

------------------------------

 SELECT                 SELECT

* FROM                   * FROM

 A.EMP;                  B.EMP;


두문장은 틀리다.

스키마가 동일해야 하므로 테이블명 앞 통일시켜야 한다.



동일한 문장 - 3 . 공백(띄워쓰기) 동일해야 한다.


     A                           B

------------------------------

 SELECT__                 select

* FROM                   *__ from

   EMP;                     emp;


두문장은 틀리다.

공백도 동일해야 된다.



동일한 문장 - 4. 주석처리도 동일해야한다.

     A                           B

------------------------------

 SELECT                 select --셀렉트문 시작

* FROM                   * from

   EMP;                     emp;


두문장은 틀리다.

왠만하면 SQL문은 주석을 달지 말자.


동일한 문장 - 5. bind변수 type도 같아야 한다.

 



Data Dictionary Cache

 

Data Dictionary is core. 데이터 베이스의 핵심

일반 유저에게 비공개로 되어있다.??



 

parameter ; 매개변수

정보기술에서, 매개변수는 사용자 또는 다른 프로그램에 의해 한 프로그램으로 전달되는, 이름, 숫자 또는 선택된 옵션 등과 같은 정보 항목이다. 매개변수들은 그것들을 받는 프로그램의 운영에 영향을 미친다.

 


>SQLPLUS SYS/ORACLE    //에러문

ERROR:
ORA-28009: connection to sys should be as sysdba or sysoper


C:\>SQLPLUS "SYS/ORACLE AS SYSDBA"


SQL> SHOW USER
USER은 "SYS"입니다


C:\>SQLPLUS /NOLOG  //패스워드 유저내임 안보이게 보안을 위해

SQL*Plus: Release 9.2.0.1.0 - Production on 월 Apr 14 16:18:32 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


SQL> SHOW USER
USER은 ""입니다

SQL> CONN SYS/ORACLE AS SYSDBA
연결되었습니다.


SQL>SHOW PARAMETER


1 .파라미터값으로 조회


SQL> SHOW PARAMETER SHARED_POOL_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size                     big integer 50331648

SQL> SELECT 50331648/1024/1024 FROM DUAL;

50331648/1024/1024
------------------
                        48


2 . 쿼리문으로 조회


SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME LIKE '%shared_pool_size%';

NAME
----------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
shared_pool_size
50331648
SQL>



3. File로 조회


C:\oracle\admin\ORCL1\pfile\init.ora.1182008114342(파라미터파일)





Data Buffer Cache(안에 테이블이 있다.)

C:\oracle\oradata\ORCL/ ~DBF : Data File


Data bufferCache 는 바둑판 모양으로 되어 있다.

그 한칸을 ORACLE BLOCK(오라클의 읽고 쓰는( I/O 최소의 단위)이라 부른다.

이렇게 BLOCK을 만든이유는 단편화를 위해서이다.



DATA BUFFER CACHE BLOCK 사이즈


SQL> SHOW PARAMETER DB_BLOCK_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192               <- BYTE단위 8K
SQL>


BLOCK_SIZE의 기본 사이즈 는 2K , 4K, 8K , 16K, 32K로 설정 가능하다.

하지만 처음 만든 PARAMETER 용량은 절대 수정이 불가능하다.

바꿀려면 새로 설치를;;;ㄷㄷㄷ


DATA BUFFER CACHE 전체 사이즈


SQL> SHOW PARAMETER DB_CACHE_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 25165824
SQL>



DATA BUFFER CACHE를 효율적으로 관리하기 위한 알고리즘 


LRU - 실제 데이타를 쓰는데 재사용되는 데이터는 사용 가능성이 많으니까 메모리에 오래남겨두고

오랫동안 사용안한것은 또 사용될 가능성이 낮으므로 그런걸빼고 최근의 데이터를 넣는다.

OLD -> OUT , NEW -> IN


LRU -List  - 실제로 다 찾기 힘드니까 리스트를 만들어 놓음

                    어떤게 오래된것인지, 어떤게 새것인지...ㅋ

                    memory주소와 상태 flag 두가지 기능을 가지고 있다.


MRU-end(new)ㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁㅁ LRU-end(old)

 

Dirty - list - 메모리주소 정보만 달려 있다.Free를 찾으면서 Dirty를 Dirty-list에 메모리 주소를 저장해둔다. Dirty-list가 꽉 차면 table이있던곳은 table에 image가 있던 곳에는 Image에(DataFile) 덮어쓴다.(Before image와같이 덮어쓰기때문에 Commit및 RollBack사용가능) 그러면 메모리와 DataFile의 내용이 같기 때문에 다시 Free가 된다.(DBWR은 DataFile에 내려쓴다.)

 


상태flag
    Free : 공백 (한번도 이 영역을 사용한 적이 없다) or Disk에 특정부분이 memory의 특정영역 일치

    Dirty : 없어지면 안되는 상태.Disk에 특정부분과 Memory특정 영역이 불일치


DML 처리 순서

    1. before Image Copy -테이블변경하기전에 그상태값 변경

    2.lock

    3.변경 - Dirty상태로 변경됨

    (DataFile에 ㅡRollBack(Undo)Segment



Redo Log Buffer

사용자의 명령어가 Excute할때 순서적으로 저장된다.
Instance Recovery  자동으로 저장한다.

 

C:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 화 Apr 15 16:08:24 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn sys/oracle as sysdba
연결되었습니다.
SQL> SHOW PARAMETER LOG_BUFFER

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------------
log_buffer                           integer     524288
SQL>

 

Hang : 명령어를 과도하게 사용하여 일시적으로 데이터 베이스가 멈춰진 상태.

          오라클은 Redo log buffer의 용량이 가득차면 용량이 생길때까지 기다린다.

         

          LGWR - 사용자들의 명령어를 받아다가 Redo Log File에 써주는 역활.

                      한개의 RedoLogFile 에 용량을 다쓰면 다른 한개의 RedoLogFile에

                      기록한다. 이러한 것을 Log Switch라고 하며 두번째의 RodoLogFile도

                      용량이 가득 차게 되면 처음 RedoLogFile에 덮어씌우는 식의 순환

                      구조를 가진다. (Redo Log File은 최소 2개 이상이 되어야 한다)          

 

발생시기

 

DBWR - Dirty list가 가득찼을때

           - LRU-end(old)부터 프리 블락을 탐색하는데 인계값에

             도달할때까지못찾으면 내려 쓴다.  

             (Free 탐색시 방향으로 찾다가 못찾겠으면 지금까지

                                                                   Dirty였던것을 Free로 바꾸는 게 더욱빠름)

           -3초룰 프로세스를 sleep상태로 만든다.

             !!메모에서 시간의 단위를 쓸때 ns (nano sec)

 

LGWR - Redo Log buffer 전체의1/3이상이면 내려쓰기 시작

           - 1M이상

           - 3초

           - Commit (transaction을 보장)하면 내려쓴다.

 

 

CKPT - CheckPiont 라는 것을 일으키는 프로세스

           Save(?) , 저장 시점

           동기화(LSN(Log Sequence Number) , SCN(System Change Number)) event

           - 해당명령어가 내부적으로 포함되어 있는지 확인하기 위해 내부적으로 숫자지정    

 

             발생시기

             Log Switch가 발생하면LGWR는 CKPT에게 LOG SWITCH한것을           

             알리고CHECKPOINT는일으킬 발생을 확인한후 로그스위치 확인 DBWR와 LGWR에게

             시그널로 신호를 한다. 그럼 메모리에 있는 모든내용을각각 내려쓴다.

             CKPT는 컨트롤 파일 헤더에 lsn과 scn을 적고. DBWR와 LGWR도 각각

             LSN과 SCN을 적는데 모두 동일한 번호가 기록된다. 이것을 동기화 되었다고 한다.

 

          LSN - Log switch시마다 1씩증가하는 숫자

 

SQL> SELECT GROUP#, SEQUENCE#, STATUS
  2  FROM V$LOG;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1         62            INACTIVE
         2         63            CURRENT
         3         61            INACTIVE

SQL>

 

현재 사용되고 있는 LSN은 SEQUENCE# 가장큰 CURRENT

 

 

           SCN - 시스템상에 이상이 생길때마다 증가

 

SQL> SELECT NAME, CHECKPOINT_CHANGE#
  2  FROM V$DATABASE;

NAME      CHECKPOINT_CHANGE#
--------- ------------------
ORCL1                8894683

SQL>




PMON - PROCESS MONITOR 프로세서를 감시하는 것(잘 사용하는지 확인작업)

             DML실행중 연결이 끊기면 처음에는 그냥 지나가지만 여전히 연결이 안되면 또 돈다;;

             3번에 걸쳐 확인에걸쳐 비정상이면 했던 명령어는 ROLLBACK된다.

             이런 프로세서가 일도 안하고 놀고 있으면(Zombie Process) 메모리영역 해제

             및 AUTO ROLLBACK한다. ROCK도 해제한다.




SMON - SYSTEM MONITOR

             INSTANCE RECOVERY 역활 담당

             instance faile 이 일어나면 자동적으로  

 


'DATABASE' 카테고리의 다른 글

DB 구조  (0) 2008.09.17
데이터베이스 트랜잭션  (0) 2008.09.17
SUB QUERY  (0) 2008.09.17
And
prev | 1 | 2 | next