일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- useQuery
- N+1
- 카카오 2차 코딩테스트
- 도커
- 주간회고
- mysql
- 프리코스
- 월간회고
- 기능별 구조
- 계층별 구조
- Blue-Green
- InnoDB 버퍼 풀
- db
- DeleteAll
- B+TREE
- 어댑티브 해시 인덱스
- ci/cd
- 멀티쓰레드 프로그래밍
- 백기선 스터디
- 클래스
- SQL 실행순서
- 블로그 병행
- 메서드명
- java
- useMutation
- 회고
- jacoco
- BalancedTree
- 우테코
- Jenkins
- Today
- Total
목록db (3)
Haneul's Blog

MySQL에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역과 로컬 메모리 영역이 있습니다. 글로벌 메모리 영역과 로컬 메모리 영역은 MySQL 서버 내에 존재하는 많은 스레드가 공유해서 사용하는 공간(글로벌 메모리)인지 아니면 각 스레드 별로 사용하는 공간(로컬 메모리)인지에 따라 나뉩니다. 글로벌 메모리 영역 글로벌 메모리 영역의 메모리 공간은 MySQL 서버가 시작되면서 운영체제로부터 할당되고, 이는 운영체제의 종류에 따라 할당해주는 방법이 다릅니다. 일반적으로 클라이언트 스레드의 수와 무관하게 하나의 메모리 공간만 할당되며, 필요에 따라 메모리 공간을 2개 이상 할당 받을 수 있지만 클라이언트의 스레드 수와는 무관합니다. 그리고 글로벌 영역은 앞에서 말했다시피 공유되는 공간이기 때문에 글로벌 영..

트랜잭션에는 ACID라는 특성이 있습니다. 이 중 D는 지속성을 의미하는데, 여기서 지속성이라는것은 트랜잭션 동작을 완료하고 완료 통지를 사용자가 받은 시점에서는 그 동작이 영속화(사라지지 않고 지속됌)되어 결과를 잃어버리지 않는 것을 의미합니다. 그래서 DB서버나, OS의 비정상적인 종료가 일어난다해도 그 전에 완료한 동작은 견딜 수 있다는 것입니다. 그렇다면 어떻게 지속성을 실현시킬 수 있는지 직관적으로 생각해보면 아래와 같이 생각할 수 있습니다. 데이터를 보존하는 기억장치인 하드디스크에 데이터 동기화 쓰기를 통해서 지속성을 유지하는 것입니다. 하지만 데이터베이스의 쓰기는 기억장치의 임의 장소에 무작위로 엑세스해서 쓰기를 수행하기 때문에 동기화 쓰기는 느려서 성능적인 면에서 별로라 쓰지 않습니다. 그..

MySQL을 공부하다가 문득 내부적으로는 어떻게 동작하고 있는지 궁금하여 공부하면서 정리해보려고 합니다. MySQL의 실행 구조는 위의 그림과 같다고 할 수 있는데, 서버쪽에서 SQL 요청이 들어오면 쿼리 파서 -> 전처리기 -> 옵티마이저 -> 쿼리 실행기를 거져서 스토리지 엔진으로 통해 실제 디스크에서 데이터를 가져오는 과정을 거칩니다. 각 부분별 역할은 아래 부분에 자세하게 설명하겠습니다. 쿼리파서 쿼리 파서는 사용자 요청으로 들어온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어취나 기호)으로 분리하여 B-Tree 형태의 구조로 만드는 역할을 해주고, 기본 문법 오류의 발견 및 오류 메시지를 전달하는 역할도 합니다. 쉽게 정리하자면 SQL을 파싱하고 문법 오류를 검사하는 역할을 한다..