본문 바로가기
728x90

전체 글249

[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.
[이펙티브자바]item 17.변경 가능성을 최소화하라 불변 클래스를 쓰면 좋은점은? 불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다 클래스를 불변으로 만들려면 다음 다섯 가지 규칙을 따른다. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다 setter 를 열지 않는다. 클래스를 확장할 수 없도록 한다. final 로 상속을 막자 모든 필드를 final 로 선언한다. 모든 필드를 private 로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 클래스 내부에 가변 객체가 있다면 접근할 수 없도록 하고, 혹시라도 접근을 허용한다면 방어적 복사를 통해 제공해주오, 실수를 하더라도 원본은 그대로로 유지하도록 하자. 불변 클래스의 장점 함수형 프로그래밍에 적합 불편객체는 단순하.. 2023. 1. 31.
[이펙티브자바]item 16.public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 class Point { public int x; public int y; } 해당 클래스는 데이터 필드에 직접 접근할 수 있어 캡슐화의 장점을 제공하지 못한다. API 를 수정하지 않고는 내부 표현을 바꿀 수 없고 내부 필드명을 봐꾸더라도 점진적으로 변경할 수 있다. 불변식을 보장할 수 없으며 외부에서 필드에 접근할 때 부수 작업을 수행할 수 없다. 메서드를 통해 접근하면 내부 작업을 수행 후 return 할 수 있다. package-private 클래스 에서도 데이터 필드를 노출해도 하등의 문제가 없다 맞는 말일 수도있는데, 그래도 필드에 직접 접근보다는 메서드를 통해 접근하도록 하자. 2023. 1. 31.
[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.
크롬, 웨일 기본창 조절하기 for mac 커맨드 + - 로 조절가능 default 설정을 원한다면 설정 -> 페이지 확대/축소 검색 후 원하는 % 로 설정 -> 끝. 2023. 1. 30.
데이터베이스 이중화와 클러스터링 차이점? 궁금하여 찾아봄. 이중화 의도: 다운타임을 방지하기위해 데이터베이스의 복제본을 유지 목적: 데이터베이스의 가용성을 높이는 것 구조: 두 개의 독립적인 데이터베이스 서버와 중앙집중적인 구조 구현: 데이터베이스 복제, 로드밸런싱, 패스워드 프로토콜 등 클러스터링 의도: 처리량을 높이기 위해 여러 노드를 사용 목적: 데이터 베이스의 처리량을 높이는 것 구조: 여러 노드에서 같은 데이터베이스를 공유하는 분산적 구조 구현: 분산 데이터베이스, 분산 캐시, 분산 스토리지 등 2023. 1. 30.
자바 접근지시자 자바의 접근 지시자는 클래스, 변수, 메서드 등의 접근 범위를 지정하는 키워드 이다. 접근 지시자를 사용하면 클래스의 캡슐화를 강화할 수 있다. public 가장 높은 공개수준, 어디에서는 자유롭게 접근 가능 다른 패키지에 있는 클래스도 접근 가능하다. protected 같은 패키지 내에서 접근 가능, 상속을 받은 클래스 내부에서도 사용 가능. 다른 패키지에 있는 클래스에서는 접근 불가능 pakage-private(default) 같은 패키지 내에서만 접근 가능. 접근지시자가 없을 경우 default 로 적용 됨. 다른 패키지에 있는 클래스에서는 접근 불가능. private 가장 낮은 공개수준, 클래스 내부에서만 접근 가능하다. 다른 패키지에 있는 클래스에서는 접근 불가능 패키지? 자바에서 관련된 클래스.. 2023. 1. 29.
728x90