CS/DB

[친절한SQL튜닝]DB의 저장구조_3

개발자 덕구🐾 2024. 6. 10. 20:59
728x90

 

<목차>

1. 데이터베이스의 저장구조 
2. 데이터의 단위는 블록
3. 논리적I/O vs 물리적I/O

 

 

1. 데이터베이스의 저장구조 

데이터를 저장하려면 먼저 테이블스페이스를 생성해야한다. 

테이블스페이스는 세그먼트를 담는 콘테이너이다. 

 

세그먼트는 여러 익스텐트로 구성이 된다. 

익스텐드란 공간확장의 단위이다. 

데이터를 입력하다가 공간이 부족해지면 익스텐트를 추가로 할당받는다. 

 

사용자가 입력한 레코드를 저장하는 공간은 데이터블록 이라고 한다.

한 블록은 하나의 테이블에서 독점한다. 

 

블록 : 데이터를 읽고 쓰는 단위

익스텐트 : 공간을 확장하는 단위 

세그먼트 : 데이터 저장공간이 필요한 오브젝트 

테이블 스페이스 : 세그먼트를 담는 콘테이너 

 

 

2. 데이터의 단위는 블록

데이터를 읽고 쓰는 단위는 블록이다. 

데이터I/O가 블록이므로 레코드 하나만 읽는다고 해도 해당 블록을 통째로 읽어야한다.

 

 

3. 논리적I/O vs 물리적I/O

논리적I/O(메모리I/O) : 메모리 버퍼캐시에서 발생한 총 블록I/O

-> 전기신호

 

물리적I/O : 디스크에서 발생한 총 블록I/O

-> 액세스 암으로 물리적으로 발생 

 

물리적 I/O가 10,000배는 느리다. 

 

 

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

논리적I/O와 물리적I/O를 저자는 자전거에 비유한다.

 

논리적I/O는 정말 딱 자전거를 타고 가는데 필요한 페달의 횟수 => 늘 일정한다.

 

물리적I/O는 바람, 도로의 경사와 같이 다른 요인에 의해서 달라지는 페달 밟는 횟수 => 변수에 따라 매번 다르다. 

 

 

DB의 버퍼캐시에서 블록을 찾지못해 디스크에서 읽은 블록I/O가 물리적 I/O이다.ᐟ.ᐟ 

DB버퍼캐시의 히트율이라는 변수에 따라 물리적I/O는 매번 다를수있다. 

 

 

물리적I/O는 시스템 상황에 따라 결정이 되는 통제가 불가능한 변수이다. 

즉, SQL의 성능을 높이기 위해서 우리가 할수있는 일은 논리적I/O를 줄이는 것 뿐이다. 

 

=> 논리적I/O를 줄임으로써 물리적I/O를 줄이는 것이 SQL 튜닝이다. 

 

 

 

반응형

'CS > DB' 카테고리의 다른 글

[친절한SQL튜닝]SQL이 느린 이유_2  (0) 2024.06.10
[친절한SQL튜닝]SQL최적화란?_1  (0) 2024.06.04