본문 바로가기
728x90

공부/Mysql29

[RealMysql 8.0]04아키텍처 4.2.13 ~ 4.4.3.3 슬로우 쿼리 InnoDB와 MyISAM, MEMORY 스토리지 엔진 비교 5.5부터 innodb 스토리지 엔진이 기본 스토리지 엔진으로 채택됐지만, 시스템 테이블 (사용자 인증 관련된 정보와 복제 관련된 정보가 저장된 mysql DB의 테이블)은 여전히 MyISAM을 사용, 또한 전문검색, 좌표검색 기능은 MyISAM 에서만 지원 8.0부터 모든것을 InnoDB 스토리지 엔진으로 대체되었음. 4.3 ~ 4.4.2 까지는 넘어감. 슬로우 쿼리 로그 시스템변수 long_query_time 으로 설정된 값보다 높을시 log_output 으로 지정된 값에 따라 테이블에 저장할지, 디스크로 저장할지 나뉘게된다.(TABLE, FILE)(둘다 CSV 파일로 저장하는 것과 동일하게 작동) mysql 의 잠금 처리는 mysql 엔진.. 2023. 2. 3.
[RealMysql 8.0]04아키텍처 4.11.1 ~ 4.2.12 어댑티브 해시 인덱스 리두 로그 아카이빙 사전적 의미로 '보관'이라는 뜻을 가진 아카이빙은 개인 및 단체가 활동하며, 남기는 수많은 기록물 중 가치가 있는 것을 선별하여 보관하는 장소, 또는 그 기록물 자체를 이르는 용어를 뜻한다. https://ju-hyung.tistory.com/151 아카이빙 (Archiving) 이란? 아카이빙 (Archiving) - 사전적 의미로 '보관'이라는 뜻을 가진 아카이빙은 개인 및 단체가 활동하며, 남기는 수많은 기록물 중 가치가 있는 것을 선별하여 보관하는 장소, 또는 그 기록물 자체를 이 ju-hyung.tistory.com 8.0 버전부터 innoDb 스토리지 엔진의 리두 로그를 아카이빙할 수 있는 기능이 추가되었다. 데이터베이스의 모든 변경 내용을 기록한 redo 로그를 포함한다... 2023. 2. 3.
[RealMysql 8.0]04아키텍처 4.2.10 ~ 4.2.11.0 체인지 버퍼 RDMBS에서 레코드가 insert, update 시 파일변경과 인덱스 업데이트 작업도 필요한데, 이는 디스크를 랜덤하게 읽는 작업을 요한다. 이러한 랜덤읽기는 많은 자원을 소모하게되어, Innodb는 버퍼 풀에 인덱스가 있다면 즉시 업데이트를 수행하지만 그렇지 않다면 즉시 실행하지 않고 임시 공간에 저장해 두고 사용자에게 결과를 반환하는 형태로 성능을 향상시킨다. 이때 사용하는 임시 메모리 공간을 체인지 버퍼 라고 한다 사용자에게 결과를 전달하기 전에 반드시 중복 여부를 체크해야하는 유니크 인덱스는 체인지 버퍼를 사용할 수 없다. 체인지 mysql 임시로 저장된 레코드 조각은 백그라운드 스레드에 의해 병합되는데 이를 버퍼 머지 스레드 라고 한다. 리두 로그 및 로그 버퍼 리두로그는 트랜잭션.. 2023. 2. 1.
mysql 트랜잭션 ACID 트랜잭션 데이터베이스의 상태를 변경하는 여러개의 작업을 단위로 묶어서 처리하는 것. 이러한 트랜잭션은 ACID 의 성질에 만족해야 한다 트랜잭션이 시작되면 전체 트랜잭션이 완료될 때까지 작업이 보장되어야 한다. ACID 원자성(Atomicity) 트랜잭션은 완전한 단위이며 하나의 트랜잭션의 작업들은 모두 수행되거나, 수행되지 않거나를 보장한다. 모든 작업이 성공하거나 실패하는 특성입니다. 트랜잭션에 포함된 모든 작업이 정상적으로 완료되거나, 하나의 작업이라도 실패하면 트랜잭션 전체가 롤백되어 모든 작업이 취소됩니다. 일관성(Consistency) 트랜잭션이 수행되면 데이터베이스의 상태는 일관적인 유효한 상태로 변경된다. 데이터의 성질이 변경되지않는다 트랜잭션이 실행된 후에도 데이터베이스가 일관된 상태를.. 2023. 2. 1.
[RealMysql 8.0]04아키텍처 4.2.9 언두 로그 언두 로그 innodb 스토리지 엔진은 트랜잭션과 격리 수준을 보장하기 위해 DML(insert, update, delete)로 변경되기 이전 버전의 데이터를 별도로 백업하는데 이렇게 백업된 데이터를 언두 로그라고 한다. 트랜잭션 보장 트랜잭션 롤백시 언두 로그에 백업된 데이터로 복구한다. 격리 수준 보장 특정 커넥션에서 데이터 변경시 다른 커넥션이 조회할 경우 격리 수준에 맞게 레코드를 읽는다. 언두 로그 레코드 모니터링 5.5 이전 버전에는 mysql 서버에서 한번 증가한 언두 로그 공간은 다시 줄어들지 않았다. 5.7과 8.0 버전에서는 이러한 언두 로그 공간에 대한 문제를 해결하였다. 언두로그를 돌아가면서 순차적으로 사용해 디스크공간을 줄이는 것도 가능, mysql 서버가 필요한 시점에 사용 공간.. 2023. 1. 30.
[RealMysql 8.0]04아키텍처 4.2.7.5 ~ 4.2.8 버퍼 풀 상태 백업 및 복구 빈번한 쿼리 요청시 버퍼 풀에 쿼리들이 사용할 데이터가 준비돼 있으면 디스크에서 데이터를 읽지않고도 쿼리가 처리될 수 있다. 이렇게 버퍼 풀에 쿼리들이 준비된 상태를 워밍업 이라고 표현한다. mysql 5.5 버전에는 mysql 을 다시 시작할 경우 서비스 오픈전에 강제 워밍업을 위해 주요 테이블과 인덱스에 대해 풀 스캔을 실행하였었다. mysql 5.6 부터는 버퍼 풀 덤프 및 적재 기능이 도입되어, 시스템 변수를 통해 퍼버 풀의 상태를 백업하였고, 다시 시작시 시스템 변수를 이용해 백업된 버퍼 풀의 상태를 다시 복구 한다. innodb 버퍼풀의 백업은 데이터 디렉토리에 id_buffer_pool 이라는 이름으로 파일이 생성되고 버퍼 풀의 크기가 아무리 크더라도 몇십 MB .. 2023. 1. 30.
[RealMysql 8.0]04아키텍처 4.2.7 ~ 4.2.7.4 InnoDB 버퍼 풀 InnoDb 스토리지 엔진에서 가장 핵심적인 부분으로 "디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해 두는 공간"이다 쓰기 작업을 지연시켜 일괄 작업할 수 있게 해주는 버퍼 역할도 같이 한다. 일반적인 application 에서는 insert, update, delete 처럼 데이터 변경하는 쿼리는 데이터 파일의 여러곳에 위치한 레코드를 변경하기 때문에, 랜덤한 디스크 작업이 발생하지만, 버퍼 풀을 통해 이러한 변경된 데이터를 모아서 처리하면 랜덤한 디스크 작업의 횟수를 줄일 수 있다. 버퍼 풀의 크기 설정 운영체제와 각 클라이언트 스레드가 사용할 메모리도 충분히 고려해서 설정해야 한다. 초기설정 후 모니터링을 통하여 조금씩 줄이거나 늘리는걸 추천 운영체제 전체 메모리 8G.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.2.1 ~ 4.2.6 프라이머리 키에 의한 클러스터링 InnoDb의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 즉 프라이머리 키 값의 순서대로 디스크에 저장된다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다.(디스크 접근도 프라이머리 키로 접근한다.) 프라이머리 키를 통한 범위 검색이 매우 빠르지만, 쓰기 성능은 저하된다. 클러스터링? 테이블을 여러 노드로 분산하는 기술, 이를 통해 데이터베이스의 성능과 확장성을 향상시킬 수 있음. 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술 mysql 은 프라이머리 키를 기준으로 클러스터링하기 때문에 프라이머리 키 값에 대한 인덱싱을 통해 쿼리가 빠르게 수행됩니다. InnoDb 스토리지 엔진과는 달리 MyI.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.1.3 ~ 4.1.10 그냥 기억 정리. 메모리 할당 및 사용 구조 mysql 에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역, 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역 mysql 서버가 시작되면서 운영체제로부터 할당된다. 클라이언트 스레드와 무관하게 하나의 메모리 공간만 할당 받는다. 필요에따라 n개의 메모리 공간을 할당 받을 수 있지만 이는 클라이언트 스레드 수와는 무관하다. 생성된 글로벌 영역이 n개라 하더라도 모든 스레드에 의해 공유된다. 대표적인 메모리 영역은 => 테이블 캐시, InnoDb 버퍼 풀, InnoDb 리두 로그 버퍼 등이 있다. 로컬 메모리 영역 세션메모리 영역이라고도 한다.(클라이언트와 서버의 커넥션을 세션이라 부르기도 하여) 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모.. 2023. 1. 28.
728x90