티스토리 뷰
오늘부터 금요일까지 오라클의 SQL 성능 튜닝 관련 교육을 듣게 되었는데, 오늘 들은 첫 강 내용을 여기에 정리해둔다.
OLTP: 많은 유저가 트랜잭션을 멀티로 발생시키는 것
DLAP: 소수의 파워유저들이 많은 데이터를 이용하는 것(예를 들자면, 통계)
튜닝을 알기 전에 먼저 SQL이 어떻게 처리되는지 그 구조를 알아야 한다. 기본적으로 사용자가 SQL로 요구를 하면 Optimizer가 SQL을 해석하고 실행계획을 작성하고 실행한다. SQL을 해석하고 실행계획을 작성하는 데 있어서 DATA Dictionary를 참조한다. 이때 DATA Dictionary는 인덱스정보, 데이터 건수 정보 등을 담고 있다.
오라클은 인스턴스 여러 개가 하나의 storage를 바라보는 식이다. 하나의 인스턴스 안에는 Buffer Cache, Shared SQL 등이 있는데, Buffer Cache는 Disk에서 읽어온 데이터가 올라가는 곳이고, SharedSQL은 실행했던 SQL을 공유하는 곳이다.
SQL 처리 과정은 다음과 같다. 먼저 SQL이 들어오면 구문을 분석하고 테이블이 존재하는지 등을 확인한다. 그리고 sharedSQL영역에 해당 SQL이 저장되어 있는지 확인한다. 이때, 이미 sharedSQL영역에 있어서 실행만 하는 경우를 soft parse라고 한다. SharedSQL영역에 존재하지 않을 경우 Data Dictionary를 찾게 되고, Optimizer가 SQL을 보고 어떤 데이터를 먼저 읽을지, 인덱스를 어떻게 탈지를 본다. 그리고 shared영역에 실행계획을 저장하고 SQL을 실행하게 된다. 이것은 hard parse라고 한다.
sharedSQL영역은 SQL문장을 실행하기 위해 그 문장과 관련한 실행 계획과 구문분석정보 등을 보관한다. 쉽게 생각하자면 같은 SQL문장을 공유하는 곳이라고 생각하면 된다. 미리 보관하기 때문에 구문 분석 시간이 줄고, 메모리를 공유하게 된다. 이때 같은 SQL문장이라고 말할 수 있는 기준은 정확히 같은 문장이어야 한다는 것이다.(아스키값으로 비교) sharedSQL영역에 보관된 SQL문장은 사용빈도가 줄면 사라지게 된다.(LRU) 그렇기 때문에 메모리영역을 적당히 잡는 것도 튜닝의 일부라고 강사님이 말씀하셨다.
'공부흔적 > 데이터베이스' 카테고리의 다른 글
MySQL에 대량 데이터 빨리 넣기 (0) | 2023.02.22 |
---|---|
EXPLAIN (0) | 2022.02.02 |
index (0) | 2021.04.19 |