독서
-
8.2 인덱스 : 책으로 예를 들었을 때 인덱스는 맨 뒤 찾아보기, 책의 내용은 데이터 파일에 해당한다고 볼 수 있다. 찾아보기를 통해 알 수 있는 페이지 번호는 데이터 파일에 저장된 레코드의 주소에 비유될 수 있다. 칼럼의 값과 해당 레코드가 저정된 주소를 키와 값의 쌍으로 삼아 인덱스를 만들어 두는 것이다. DBMS의 인덱스는 SortedList와 마찬가지로 저장되는 칼럼의 값을 이용해 항상 정렬된 상태를 유지한다. 데이터 파일은 ArrayList 같이 저장된 순서대로 별도의 정렬없이 그대로 저장한다. 결론적으로 DBMS에서 인덱스는 데이터의 저장 성능(INSERT, UPDATE, DELETE) 희생하고, 대신 데이터의 읽기 속도를 높이는 기능이다. 1. 인덱스를 역할별로 구분한다면 프라이머리 키, ..
8. 인덱스 (상)8.2 인덱스 : 책으로 예를 들었을 때 인덱스는 맨 뒤 찾아보기, 책의 내용은 데이터 파일에 해당한다고 볼 수 있다. 찾아보기를 통해 알 수 있는 페이지 번호는 데이터 파일에 저장된 레코드의 주소에 비유될 수 있다. 칼럼의 값과 해당 레코드가 저정된 주소를 키와 값의 쌍으로 삼아 인덱스를 만들어 두는 것이다. DBMS의 인덱스는 SortedList와 마찬가지로 저장되는 칼럼의 값을 이용해 항상 정렬된 상태를 유지한다. 데이터 파일은 ArrayList 같이 저장된 순서대로 별도의 정렬없이 그대로 저장한다. 결론적으로 DBMS에서 인덱스는 데이터의 저장 성능(INSERT, UPDATE, DELETE) 희생하고, 대신 데이터의 읽기 속도를 높이는 기능이다. 1. 인덱스를 역할별로 구분한다면 프라이머리 키, ..
2024.01.21 -
Mysql 5.7 이후 암호화 기능은 처음에 데이터 파일에 대해서만 암호화 기능이 제공됐다. 8.0 버전부터는 추가로 리두 로그, 언두 로그, 복제를 위한 바이너리 로그 등 모두 암호화 기능을 지원하기 시작했다. 7.1 Mysql 서버의 데이터 암호화 Mysql 서버 암호화 기능은 데이터베이스 서버와 디스크 사이의 데이터 읽고 쓰기 지점에서 암호화 또는 복호화를 수행한다. 별도의 Mysql 서버에서 디스크 입출력 이외의 부분에서는 암호화 처리가 전혀 필요 없다. 즉 Mysql 서버의 I/O 레이어에서만 데이터의 암호화 및 복호화 과정이 실행되는 것이다. MySQL 서버에서는 사용자의 쿼리를 처리하는 과정에서 테이블의 데이터가 암호화 되어있는지 확인할 필요가없다. 왜냐하면, 스토리지에서 데이터를 쓰기전에 ..
7. 데이터 암호화Mysql 5.7 이후 암호화 기능은 처음에 데이터 파일에 대해서만 암호화 기능이 제공됐다. 8.0 버전부터는 추가로 리두 로그, 언두 로그, 복제를 위한 바이너리 로그 등 모두 암호화 기능을 지원하기 시작했다. 7.1 Mysql 서버의 데이터 암호화 Mysql 서버 암호화 기능은 데이터베이스 서버와 디스크 사이의 데이터 읽고 쓰기 지점에서 암호화 또는 복호화를 수행한다. 별도의 Mysql 서버에서 디스크 입출력 이외의 부분에서는 암호화 처리가 전혀 필요 없다. 즉 Mysql 서버의 I/O 레이어에서만 데이터의 암호화 및 복호화 과정이 실행되는 것이다. MySQL 서버에서는 사용자의 쿼리를 처리하는 과정에서 테이블의 데이터가 암호화 되어있는지 확인할 필요가없다. 왜냐하면, 스토리지에서 데이터를 쓰기전에 ..
2024.01.14 -
Mysql 서버에서 디스크에 저장된 데이터 파일의 크기는 일반적으로 쿼리의 처리 성능과도 직결되지만 백업 및 복구 시간과도 밀접하게 연관된다. 디스크의 데이터 파일은 클수록 쿼리를 처리하기 위해서 더 많은 데이터 페이지를 InnoDB 버퍼 풀로 읽어야 할 수도 있고, 새로운 페이지가 버퍼 풀로 적재되기 때문에 그만큼 더티 페이지가 더 자주 디스크로 기록돼야 한다. 그리고 데이터 파일이 크면 백업 시간이 오래걸리며, 복구 하는데 시간이 오래 걸린다. 이런 문제를 해결하기 위해 데이터 압축 기능을 제공한다. 크게 테이블 압축, 페이지 압축 2가지로 구분할 수 있다. 1. 페이지 압축 : "Transparent Page Compression" 이라고도 불리며, Mysql 서버가 디스크에 저장하는 시점에 데이터..
6. 데이터 압축Mysql 서버에서 디스크에 저장된 데이터 파일의 크기는 일반적으로 쿼리의 처리 성능과도 직결되지만 백업 및 복구 시간과도 밀접하게 연관된다. 디스크의 데이터 파일은 클수록 쿼리를 처리하기 위해서 더 많은 데이터 페이지를 InnoDB 버퍼 풀로 읽어야 할 수도 있고, 새로운 페이지가 버퍼 풀로 적재되기 때문에 그만큼 더티 페이지가 더 자주 디스크로 기록돼야 한다. 그리고 데이터 파일이 크면 백업 시간이 오래걸리며, 복구 하는데 시간이 오래 걸린다. 이런 문제를 해결하기 위해 데이터 압축 기능을 제공한다. 크게 테이블 압축, 페이지 압축 2가지로 구분할 수 있다. 1. 페이지 압축 : "Transparent Page Compression" 이라고도 불리며, Mysql 서버가 디스크에 저장하는 시점에 데이터..
2024.01.13 -
5장은 Mysql 동시성에 영향을 미치는 Lock과 트랜잭션, 트랜잭션의 격리 수준을 살펴보겠다. 트랜잭션은 작업의 완선성을 보장해 주는 것이다. 즉 논리적인 작업 셋을 모두 완벽하게 처리하거나, 그렇지 않으면 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 해주는 기능이다. Lock, 트랜잭션은 서로 비슷하지만 사실 Lock은 동시성을 제어하기 위한 기능이고, 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 예로 하나의 회원 정보 레코드를 여러 커넥션에서 동시에 변경하는데 Lock이 없다면 하나의 데이터를 여러 커넥션에서 변경할 수 있다. 레코드의 값은 예측할 수 없다. Lock은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있..
5. 트랜잭션5장은 Mysql 동시성에 영향을 미치는 Lock과 트랜잭션, 트랜잭션의 격리 수준을 살펴보겠다. 트랜잭션은 작업의 완선성을 보장해 주는 것이다. 즉 논리적인 작업 셋을 모두 완벽하게 처리하거나, 그렇지 않으면 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 해주는 기능이다. Lock, 트랜잭션은 서로 비슷하지만 사실 Lock은 동시성을 제어하기 위한 기능이고, 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 예로 하나의 회원 정보 레코드를 여러 커넥션에서 동시에 변경하는데 Lock이 없다면 하나의 데이터를 여러 커넥션에서 변경할 수 있다. 레코드의 값은 예측할 수 없다. Lock은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있..
2024.01.07 -
4.2.12 어댑티브 해시 인덱스 일반적으로 '인덱스'는 테이블에 사용자가 생성해둔 B-Tree 인덱스를 의미한다. 또는 사용자가 직접 테이블에 생성해둔 인덱스가 우리가 일반적으로 알고있는 인덱스일 것이다. 하지만 '어댑티브 해시 인덱스'는 사용자가 수동으로 생성하는 인덱스가 아니라 InnoDB 스토리지 엔진에서 사용하자 자주 요청하는 데이터에 대해 자동으로 생성하는 인덱스이며, 사용자는 innodb_adaptive_hash_index 시스템 변수를 이용해서 어댑티브 해시 인덱스 기능을 활성화하거나 비활성화 할 수 있다. 어댑티브 해시 인덱스는 B-Tree 검색 시간을 줄여주기 위해 도입된 기능이다. InnoDB 스토리지 엔진은 자주 읽히는 데이터 페이지의 키 값을 이용해 해시 인덱스를 만들고, 필요할 ..
4.3 아키텍처 (하)4.2.12 어댑티브 해시 인덱스 일반적으로 '인덱스'는 테이블에 사용자가 생성해둔 B-Tree 인덱스를 의미한다. 또는 사용자가 직접 테이블에 생성해둔 인덱스가 우리가 일반적으로 알고있는 인덱스일 것이다. 하지만 '어댑티브 해시 인덱스'는 사용자가 수동으로 생성하는 인덱스가 아니라 InnoDB 스토리지 엔진에서 사용하자 자주 요청하는 데이터에 대해 자동으로 생성하는 인덱스이며, 사용자는 innodb_adaptive_hash_index 시스템 변수를 이용해서 어댑티브 해시 인덱스 기능을 활성화하거나 비활성화 할 수 있다. 어댑티브 해시 인덱스는 B-Tree 검색 시간을 줄여주기 위해 도입된 기능이다. InnoDB 스토리지 엔진은 자주 읽히는 데이터 페이지의 키 값을 이용해 해시 인덱스를 만들고, 필요할 ..
2024.01.07 -
Mysql 스토리지 엔진 중 가장 많이 사용되는 InnoDB 스토리지 엔진을 간단히 살펴봅시다. 유일하게 레코드 기반의 잠금을 제공하며, 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어납니다. 1) 프라이머리 키에 의한 클러스터링 : InnoDB 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장한다. 다시말해 프라이머리 키값의 순서대로 디스크에 저장된다는 뜻이며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리된다. 결과적으로 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정된다. 2) 외래 ..
4.2 아키텍처 (중)Mysql 스토리지 엔진 중 가장 많이 사용되는 InnoDB 스토리지 엔진을 간단히 살펴봅시다. 유일하게 레코드 기반의 잠금을 제공하며, 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어납니다. 1) 프라이머리 키에 의한 클러스터링 : InnoDB 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장한다. 다시말해 프라이머리 키값의 순서대로 디스크에 저장된다는 뜻이며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리된다. 결과적으로 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 비중이 높게 설정된다. 2) 외래 ..
2024.01.04