본문 바로가기
728x90

공부158

[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.
데이터베이스 이중화와 클러스터링 차이점? 궁금하여 찾아봄. 이중화 의도: 다운타임을 방지하기위해 데이터베이스의 복제본을 유지 목적: 데이터베이스의 가용성을 높이는 것 구조: 두 개의 독립적인 데이터베이스 서버와 중앙집중적인 구조 구현: 데이터베이스 복제, 로드밸런싱, 패스워드 프로토콜 등 클러스터링 의도: 처리량을 높이기 위해 여러 노드를 사용 목적: 데이터 베이스의 처리량을 높이는 것 구조: 여러 노드에서 같은 데이터베이스를 공유하는 분산적 구조 구현: 분산 데이터베이스, 분산 캐시, 분산 스토리지 등 2023. 1. 30.
[모던 자바 인 액션] 람다 표현식 3.3 ~ 3.4 람다활용 : 실행 어라운드 패턴 특정 기능을 수행하기 전과 후에 수행해야 할 일을 정의하고 재사용할 수 있도록 하는 패턴 트랜잭션, 로깅, 캐싱, 성능측정 등과 같은 공통적인 기능을 수행하는데 사용. 핵심 로직을 감싸는 공통 로직을 캡슐화한 디자인 패턴. 함수형 인터페이스 java.util.function 패키지 Supplier => T get() => 매개변수는 없고 반환값만 있음. (공급자) Predicate 인터페이스 => boolean test(T t) => 조건식을 표현하는데 사용, 매개변수 하나이며 반환 타입은 boolean Consumer 인터페이스 => void accept(T t) => Supplier 와 반대로 매개변수만 있고, 반환값이 없음(소비자) Function 인터페이스 => R.. 2023. 1. 29.
[모던 자바 인 액션] 람다 표현식 3.1 ~ 3.2 람다와 스트림을 잘하고싶어서..기억 정리 겸 올림. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 가질 수 있다. 여러가지 람다 표현식 () -> {} 파라미터가 없고 void 를 반환 () -> "Jeong" 파라미터가 없으며 문자열을 반환 () -> { return "Jeong" } 파라미터가 없으면 명시적으로 return 문을 이용해 문자열을 반환 람다 표현식에는 return이 함축되어 있다.return 문을 명시적으로 사용하지 않아도 된다. 어디에, 어떻게 람다를 사용할까 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다. 함수형 인터페이스 https:.. 2023. 1. 29.
[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.
[RealMysql 8.0]04아키텍처 4.1 ~ 4.1.2.2 그냥 기억 정리 글. MySql 엔진 아키텍처 Mysql 서버는 크게 MySql 엔진, 스토리지 엔진으로 구분할 수 있음. 전체구조 MySql 서버 MySql 엔진 요청된 sql 문장을 분석하거나 최적화 하는 등 dbms 의 두뇌에 해당하는 처리를 수행 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장, 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담한다. 핸들러 API mysql 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때, 각 스토리지 엔진에 쓰기, 읽기를 요청하는데 이러한 요청을 핸들러 요청이라하고, 여기서 사용되는 api를 핸들러 api 라고 한다. mysql 스레딩 구조 mysql 서버는 프로세스 기반이 아니라 스레딩 기반으로 작동, 크게 1.포그라운드 스레드, 2.백그라운드 스레.. 2023. 1. 28.
[이펙티브자바]item 15. 클래스와 멤버의 접근 권한을 최소화하라 구현과 API 분리하는 정보은닉 장점 시스템 개발 속도를 높인다 인터페이스 설계시 사용하는 쪽과 지원하는 쪽이 동시에 개발이 가능하다. 시스템 관리 비용을 낮춘다 컴포넌트를 더 빨리 파악할 수 있기 떄문에, 인터페이스 위주로 빠르게 파악이 가능하다 소스프퉤어 재사용성을 높인다 모듈화가 잘되어 있따면 병목지점을 빠르게 찾아서 처리할 수 있다. 시스템 개발 난이도를 낮춘다 큰 시스템을 개발할때 작은 단위로 나눠서 구현하다보면 전체를 구현할 수 있다. 모든 클래스와 멤버의 정급성을 가능한 한 좁혀야 한다. 톱레벨 클래스와 인터페이스에 pakage-private(default) 또는 public 을 쓸 수 있다. public 으로 선언하면 API가 되므로 하위 호환성을 유지하려면 계속 관리해야 한다. 패키지 외.. 2023. 1. 19.
728x90