본문 바로가기

데이터베이스34

실행 계획과 인덱스 다이브 목적 연휴 첫날 심심함을 달래기 위해 공부한다 최적화란 MySQL서버는 여러 통계 정보를 활용해 가장 빠른 실행 계획을 세우는 것을 최적화라 한다. 오라클 DB, Postgresql는 쿼리 실행계획을 캐싱해서 사용하는 반면, MySQL은 쿼리에 대한 실행 계획을 해당 커넥션에만 활용을 하고 다른 커넥션과는 공유를 하지 않는다. 인덱스 다이브란 MySQL에서 쿼리가 실행되면 옵티마이저는 퍼포먼스 스키마의 통계 정보 뿐 아니라 실제 테이블의 데이터를 샘플링해서 실행 계획을 선택한다. 이때 샘플링을 하는 과정을 인덱스 다이브 혹은 랜덤 인덱스 다이브라고 한다. 계획 수립 위와 같은 이유로 MySQL의 계획 수립에는 많은 비용이 소모된다. 하지만 실제 테비을의 데이터를 샘플리하기 때문에 다른 DBMS 서버보다 .. 2023. 10. 7.
계층 쿼리 회사 recursive 절을 보다가 공부해봄. CREATE TABLE employees ( id INT PRIMARY KEY, name TEXT, manager_id INT REFERENCES employees(id) ); INSERT INTO employees VALUES (1, 'CEO', NULL), (2, 'Manager A', 1), (3, 'Manager B', 1), (4, 'Employee 1', 2), (5, 'Employee 2', 2), (6, 'Employee 3', 3), (7, 'sEmployee ', NULL), (8, 'sEmployee A', 7), (9, 'sEmployee B', 7), (10, 'sEmployee 1', 4), (11, 'sEmployee 2', 4),.. 2023. 10. 3.
트랜잭션 데이터 저장 과정, Direct Path Insert, Delete 과정 [ 트랜잭션 데이터 저장 과정 ] 1. DML 문을 실행하면 Redo 로그버퍼에 변경사항을 기록한다. 2. 버퍼블록에서 데이터를 변경(추가/수정/삭제)한다. 물론 버퍼캐시에서 블록을 찾지 못하면 데이터파일에서 읽ㄴㄴ 작업부터 한다. 3. 커밋한다. 4. LGWR 프로세스가 Redo 로그 버퍼 내용을 로그 파일에 일괄 저장한다. 5. DBWR 프로세스가 변경된 버퍼블록들은 데이터파일에 일괄 저장한다. DBWR : 버퍼 캐시에 변경된 페이지( 더티 페이지 )를 일정한 주기 혹은 버퍼 캐시가 가득찰 경우에 데이터 페이지를 데이터블록에 기록함. LGWR : 로그 버퍼에 기록된 쿼리 실행이력을 일정한 주기, 로그 버퍼가 가득찼을 경우에 파일로 기록함. [ Direct Path I/O ] 버퍼 캐시를 경유하지 않고.. 2023. 6. 25.
SQL 튜닝과 조인 [ 목적 ] 저번에 블로그에 작성한 조인에 대해서 좀 더 깊게 이해한다. NL, 해시, 소트, 서브쿼리 조인에 대해 적재 적소에 맞게 사용할 수 있다. [ SQL 튜닝이란? ] 데이터를 읽는 방식에는 2가지가 있다. 논리적 I/O와 물리적 I/O 2가지가 있다. 논리적 I/O는 메인 메모리에 있는 데이터를 읽어오는 것(전기적 신호)이고, 물리적 I/O는 디스크에서 데이터를 읽어오는 것(HDD의 경우 ARM을 움직이며 데이터를 찾아 읽어오는 것)이다. 논리적 I/O는 물리적 I/O보다 10000배 가량 빠르다. 논리적 I/O는 물리적 I/O보다 상대적으로 걸리는 시간이 일정한 편이다. 예를 들면, 물리적 I/O는 디스크의 경합이 심하거나, 장치의 성능이 떨어질 경우 등 다양한 변수가 존재하여 항상 시간이 .. 2023. 6. 24.