\- 불필요하게 많은 SQL 수행, 파싱을 많이 일으키거나, 많은 데이터 Fetch, 많은 I/O일으키도록 구현하는것이 성능문제를 일의키는 90%이상의 요인
\- 데이터 베이스 성능 튜닝의 3대 핵심요소
SQL 파싱 부하 해소, 데이터베이스 Call 최소화, I/O 효율화
\- 성능요소를 해결하는것은 모두 개발팀 역량에 달렸다. 어플리케이션으로부터 발생하는 일량을 근본적으로 줄여야 한다.
제1절 데이터베이스 아키텍처 :개괄적인 데이터베이스 아키텍처 설명
제2절 SQL 파싱 부하 : 옵티마이저 최적화 과정설명, 바인드변수사용, 라이버러리 캐시 최적화방법
제3절 데이터베이스 Call과 네트워크 부하 : 데이터베이스 Call횟수줄여 네트워크부하를줄이고 쿼리성능 높이는 방안
제4절 데이터베이스 I/O 원리 : I/O효율화의 세부 원리로서 옵티마이저 원리, 인덱스와 조인 원리
|| Oracle || SQL Server || 설명 ||
System Monitor (SMON) | Database cleanup /Shrinking thread | 장애가 발생한 시스템을 재기동할 때 인스턴스 복구를 수행하고, 임시 세그먼트와 익스텐트를 모니터링 한다. |
Process Monitor (PMON) | Open Data Services (OPS) | 이상이 생긴 프로세스가 사용하던 리소스를 복구한다. |
Database Writers (DBWn) | Lazywriter thread | 버퍼캐시에 있는 Dirty 버퍼를 데이터 파일에 기록한다. |
Log Writer(LGWR) | Log Writer thread | 로그버퍼엔트리를 Redo 로그 파일에 기록한다. |
Archiver(ArCn) | N/A | 꽉 찬 Redo 로그가 덮어 쓰여지기 전에 Archive 로그디렉토리로 백업한다. |
Checkpoint (CKPT) | Database Checkpoint thread | Checkpoint 프로세스는 이전에 Checkpoint가 일어났던 마지막 시점 이후의 데이터베이스 변경 사항을 데이터파일 에 기록하도록 트리거링, 기록이 완료되면 현재 어디까지 기록했는지를 컨트롤 파일과 데이터 파일 헤더에 저장. |
Recover(RECO) | Distributed Transaction Coordinator(DTC) | 분산 트랜잭션 과정에 발생한 문제를 해결한다. |
DB | 명칭 | 블록크기 | |
ORACLE | 블록 | 2KB, 4KB, 8KB, 16KB, 32KB, 64KB | |
SQL Server | 페이지 | 8KB |
ORACLE | 다양한크기의 익스텐트 | 모든블록을 단일오브젝트가 사용 |
SQL Server | 항상8개,64KB(page크기가 8KB이므로) | 2개이상의 오브젝트 사용 가능 |
| 64KB 이상의 공간을 필요로 한느 테이블이나 인덱스를 위해 사용되며, 8개 페이지 단위로 할당된 익스텐트를 단일오브젝트가 모두 사용 \ | |
| 한 익스텐트에 할당된 8개 페이지를 여러 오브젝트가 나누어 사용하는 형태. 모든 테이블이 처음에는 혼합 익스텐트로 시작하지만 64KB를 넘으면서 2번째부터 균일 익스텐트를 사용하게 된다. |
세그먼트(Segment)\
ORACLE | 세그먼트 |
SQL Server | 힙구조 or 인덱스구조오브젝트 |
---|
ORACLE | 유저별로 temp tablespace 지정 가능 |
SQL Server | tempdb 데이터베이스를 사용 |
\-트렌젝션데이터 유실방지
\-마지막 체크포인트이후 사고 발생 직전까지 수행되었던 트랜잭션을 Redo로그를 통해 재현(캐시복구)
\-최소 두개이상의 파일로 구성되며, round-robin방식으로 로그파일 재사용
ORACLE | System Global Area(SGA) |
SQL Server | Memory Pool |
\-여러 프로세스가 동시에 엑세스 할 수 있는 메모리영역
\-모든 DBMS는 공통적으로 사용하는 캐시영역이 있음(DB버퍼캐시,공유풀,로그버퍼)
\-그 외에 Lage Pool, JAVA pool 등을 포함하고, 시스템 구조와 제어구조를 캐싱하는 영역도 포함.
\-여러프로세스에 공유되기 때문에 Latch, 버퍼 Lock, 라이브러리캐시Lock/Pin 같은 액세스 직렬화 메커니즘이 사용
데이터파일로부터 읽어들인 데이터 블록을 담는 캐시영역
사용자 프로세스는 서버 프로세스를 통해 DB버퍼 캐시의 버퍼 블록을 동시에 엑세스(내부적으로 Buffer Lock을 통한 직렬화)
Direct Path Read 매커니즘이 작동하는 경우를 제외하면, 모든 블록 읽기는 버퍼 캐시를 통해 이루어짐
디스크에서 읽을때도 버퍼캐시에 적재한 후 읽음
데이터 변경도 버퍼캐시에 적재된 블록을 통해 이루어짐
변경된 블록(더티버퍼)은 주기적으로 DBWR 프로세스에 의해 데이터파일에 기록
버퍼상태 | 내용 |
Free 버퍼 | 인스턴스 기동 후 아직 데이터가 읽혀지지 않아 비어 있는 상태거나, 데이터파일과 서로 동기화 되어 언제든지 덮어써도 되는 상태 |
Dirty Buffer | 버퍼가 캐시된 이후 변경이 발생했지만, 아직 디스크에 기록되지 않아 데이터 파일 블록과 동기화가 필요한 버퍼 블록, 이 버퍼 블록들이 재사용 되려면 디스크에 먼저 기록되어야 하며, 디스크에 기록되는 순간 Free 버포로 바뀜 |
Pinned 버퍼 | 읽기 쓰기 작업이 현재 진행중인 버퍼블록 |
ORACLE | Shared Pool |
SQL Server | 프로시저 캐시 |
딕셔너리캐시와 라이브러리 캐시로 구성되며 버퍼캐시처럼 LRU 알고리즘을 사용
1) 딕셔너리 캐시
테이블, 인덱스와 같은 오브젝트는 물론 테이블스페이스, 데이터파일, 세그먼트, 익스텐트, 사용자, 제약사항과 같은 메타정보 저장
2) 라이브러리 캐시
SQL 실행에 관련된 모든 객체에 대한 정보 관리
서버 프로세스가 SQL을 작업할 때 사용되는 작업공간
SQL에 대한 분석정보 및 실행계획 저장
공유 SQL을 저장하기 위해 사용
라이브러리 캐시는 캐싱된 SQL과 그 실행계획의 재사용성을 높이는 것이 수행 성능을 높이고 DBMS 부하를 최소회하는 핵심 원리 임
바인드 변수 사용 및 기준에 맞는 SQL 작성으로 재사용성 높여줘야함
SQL Server : 로그캐시
서버프로세스가 데이터 블록 버퍼에 변경을 가하기 전 Redo 로그 버퍼에 먼저 기록 \-> LGWR프로세스가 Redo 로그파일에 기록
ORACLE | 대기이벤트(Wait Event) |
SQL Server | 대기유형(Wait Type) |
|
|
애플리케이션과 네트워크 구간에서 소모된 시간에 의해 나타난 이벤트
\-SQL*Net message from client : client로부터 다음 명령이 올때까지 idle 상태로 기다릴때 발생(데이터베이스 경합과 관계없음)
\-SQL*Net message to client : 메시지를 보냈는데 메시지를 받았다는 신호가 늦게 도착하는경우 이거나 , 클라언트가 너무 바쁠경우.
\-SQL*Net more data to client: 메시지를 보냈는데 메시지를 받았다는 신호가 늦게 도착하는경우 이거나 , 클라언트가 너무 바쁠경우.
\-SQL*Net more data from client : 클라이언트로부터 더 받을 데이터가 있는데 지연이 발생한 경우
디스크 I/O 발생할 때 나타나는 대기 이벤트
\-db file sequential read : Single Block I/O. 한번의 I/O call에 하나의 데이터 블록만 읽음. 인덱스 블록을 읽을때 발생
\-db file scattered read : Multi Block I/O . Table Full Scan 또는 Index Fast Full Scan 시 나타남
\-direct path read
\-direct path write
\-direct path write temp
\-direct path read temp
\-db file parallel read
버퍼캐시에서 블록을 읽는 과정에서 경합이 발생하여 나타나는 대기 이벤트
\-latch : cache buffers chains
\-latch : cache buffers lru chain
\-buffers busy waits
\-free buffer waits
그 외 대기이벤트
\-log file sync
\-checkpoint completed
\-log file switch completion
\-log buffer space