요약 InnoDB, MyISAM, MEMORY 스토리지 엔진과, InnoDB 가 거의 많이 사용된다는 사실을 알게됨. MyISAM 스토리지 엔진의 아키텍쳐와 그 중 키 캐시에 대해 이해하게 됨. 키 캐시를 사용하지 않을 떄 운영체제의 기본 캐시 & 버퍼를 사용한다는 사실을 알게 됨. MyISAM 스토리지 엔진의 데이터 파일과 프라이머리 키(인덱스) 구조에 대해 알게 됨. 가변 길이 ROWID 에서 MyISAM 테이블 최대 크기가 2^(8*(7-1)) 에서 8을 왜 곱하는지 잘 모르겟음.. (해당 테이블의 칼럼에 들어갈 최대 값이 8바이트여서 그런건지.. 모르겟음) → 146page MySQL 트러블 슈팅을 위해 로그 파일을 보는 것을 습관해야 한다. 각 에러로그를 보는 방법에 대해 이해하게 됨. 발췌 M..
요약 리두 로그 의 사용 목적을 이해하게됨. 로그 버퍼를 이용해 리두 로그 버퍼링을 하는 방법을 이해하게 됨. 리두 로그 아카이빙을 통해 리두 로그들을 관리하는 방법들을 이해하게 됨. 리두로그의 활성, 비활성화 상태와 서버의 비정상 종료와의 관계와 어떤 식으로 데이터 파일을 관리할지를 이해하게 됨. 어댑티브 해시 인덱스의 의미와 장단점을 이해하게됨. 책에 설 말하는 28% 정도의 어댑티브 해시 인덱스 이용했다는 근거를 잘 모르겠음.. CPU 사용률이 100% 에 근접하면 어댑티브 해시 인덱스가 효율적이라고 하는데 효율적이지 않은 것 아닌가..? 라고 생각함.. 메모 리두 로그 및 로그 버퍼 리두 로그(Redo Log) 는 트랜잭션의 4가지 요소인 ACID 중 D(Durable) 에 해당하는 영속성과 가장..
요약 Double Write Buffer 사용 목적과 그 방법을 이해하게 됨. 언두 로그의 사용 이유와 모니터링 방법, 테이블 스페이스에 대한 이력과 관리 방법을 이해하게 됨. 체인지 버퍼의 사용 목적과 관리 방법을 이해하게됨. 발췌 대용량의 데이터를 처리하는 트랜잭션뿐만 아니라 트랜잭션이 오랜 시간 동안 실행될 때도 언두 로그의 양은 급격히 증가할 수 있다. 메모 Double Write Buffer InnoDB 스토리지 엔진의 리두 로그는 공간 낭비를 방지하기 위해 페이지의 변경된 내용만 기록함. 더티 페이지를 디스크 파일로 플러시할 때 일부만 기록되는 문제가 발생하면 그 페이지 내용을 복구하지 못할 수 있음. 페이지가 일부만 기록되는 현상을 파셜 페이지(Partial page) 또는 톤 페이지(Tor..
요약 InnoDB 버퍼풀의 역할과 관리하는 방법의 자료구조를 알게 되었다. 쓰기 버퍼링 기능 향상을 위한 버퍼풀과 리두로그와의 관계를 이해하게 되었다. 버퍼 풀에 등록되어있는 더티 페이지의 플러시 전략을 이해하게 되었다. 버퍼풀에 적재된 내용을 확인하는 방법을 알게 되었다. 적재된 내용 확인에 대한 쿼리도 설명해 줬지만 완벽히 이해하지는 못함... 버퍼풀과 리두로그의 관계를 이해하는것이 어려웠다. 다른사람이 정리한 블로그도 읽으면서 내용을 이해하려고 노력했다. https://new-age-jh.tistory.com/288 발췌 InnoDB 스토리지 엔진은 체크 포인트를 발생시켜 디스크의 리두 로그와 데이터 페이지의 상태를 동기화 하게 된다. 체크 포인트는 MySQL 서버가 시작될 때 InnoDB 스토리지..
요약 InnoDB 스토리지 엔진 아키텍처의 전체 그림과 각 요소의 일부분에 대한 역할을 이해하게 됨. 스토리지 엔진별 인덱싱 전략과 프라이머리 키와 클러스터링 인덱스에 대한 간략한 내용을 이해하게 됨. 외래 키 작업의 불편함에 대한 내용을 다시한번 인식하게 됨. 실제 서비스에서 자주 사용하지 않는다고 하는데, 잘 모르겠음. 다른 회사에서 많이 쓰고 있는지도 잘 모르겠다. 우리 회사에서는 JPA 연관관계를 이용해서 자주 쓰고 있는편임. → 책에서 말한 불편함을 경험한 적이 있음. MVCC 를 이해하게 됨. 트랜잭션처리와 묶어서 언두 영역의 존재를 알게되고 어떻게 잠금 없는 읽기가 가능한지 이해하게 됨. 여러 장애 복구 모드에 대한 이해를 하게 됨. 복구 모드별 특이사항을 이해하게 되고, 복구 모드가 발생되..
요약 플러그인 스토리지 엔진 모델에 대해 알게 되었음. 스토리지 엔진과 플러그인을 제공된 핸들러 API & 플러그인 API 를 통해 커스텀하게 구현할 수 있다는 사실을 알게 됨. 쿼리 실행구조와 각 부분의 역할을 이해하게 됨. 쿼리 캐시의 탄생과 삭제 역사를 이해하게 됨. mysql 에서의 스레드풀 동작 원리를 이해하게 됨. 트랜잭션 지원 메타데이터의 관리 방법과 이전 버전의 히스토리를 이해하게 됨. 발췌 MyISAM 이나 InnoDB 스토리지 엔진 가운데 뭘 사용하든 별 차이가 없는 것 아닌가, 라고 생각할 수 있지만 그렇진 않다. 여기서 설명한 내용은 아주 간략하게 언급한 것일 뿐이고, 단순히 보이는 ‘데이터 읽기/쓰기’ 작업 처리 방식이 얼마나 달라질 수 있는가를 이 책의 나머지 부분을 통해 깨닫게..
요약 MySQL 서버의 구성 요소를 알게 되었다. MySQL 엔진의 역할을 알게 되었다. 스토리지 엔진의 역할을 알게 되었다. MySQL 엔진과 스토리지 엔진의 상호작용 방법을 알게 되었다. MySQL 의 스레딩 구조와 메모리 할당 방식을 알게 되었다. 발췌 MySQL 서버는 프로세스 기반이 아니라 스레드 기반으로 작동한다. 메모 MySQL 서버는 다음과 같이 나눌 수 있다. MySQL 엔진 → 사람의 머리 역할 스토리지 엔진 → 손발 역할 핸들러 API 를 만족하는 커스텀 스토리지 엔진 구현하여 사용 가능 ex) InnoDB 스토리지 엔진, MyISAM 스토리지 엔진 MySQL 엔진 아키텍처 MySQL 서버는 다른 DBMS 에 비해 구조가 독특함. 독특한 구조로 인해 다른 DBMS 가 가질 수 없는 엄..
요약 사용자 식별에 아이디 뿐만 아니라 호스트도 함께 명시해야 함. 여러 시스템 내장 계정의 존재를 알게 됨. 유저 생성시 여러 옵션으로 권한, 정책들을 사용할 수 있음을 알게 됨. 이중 비밀번호를 통해 응용 서비스의 다운 타임 없이 비밀번호를 새롭게 변경할 수 있는 방식을 알게됨. 발췌 하나의 계정에 다른 계정의 권한을 병합하기만 하면 되므로 MySQL 서버는 역할과 계정을 구분할 필요가 없는 것이다. 메모 권한 (Privilege) 5.7 버전까지는 글로벌 권한과 객체 단위 권한 으로 구분됐다. 글로벌 권한 : 데이터베이스나 테이블 이외의 객체에 적용되는 권한 객체 권한 : 데이터베이스나 테이블을 제어하는데 필요한 권한 객체 권한은 GRANT 명령으로 권한을 부여할 떄 반드시 특정 객체를 명시해야 함..
요약 사용자 식별에 아이디 뿐만 아니라 호스트도 함께 명시해야 함. 여러 시스템 내장 계정의 존재를 알게 됨. 유저 생성시 여러 옵션으로 권한, 정책들을 사용할 수 있음을 알게 됨. 이중 비밀번호를 통해 응용 서비스의 다운 타임 없이 비밀번호를 새롭게 변경할 수 있는 방식을 알게됨. 발췌 패스 메모 사용자 식별 MySQL 사용자 계정을 생성 하는 방법 & 각 계정 권한 설정 방법은 다른 DBMS 와 조금 차이가 있음. MySQL 사용자 계정은 사용자의 아이디 뿐만 아니라 해당 사용자의 접속 지점 (클라이언트가 실행된 호트스명 or 도메인 or IP 주소)도 계정의 일부가 된다. 항상 아이디와 호스트를 함께 명시해야 함. 'svc_id'@'127.0.0.1' MySQL 서버가 기동중인 로컬 호스트에서 sv..
요약 서버 설정 파일 (my.cnf) 의 존재와 MySQL 서버 시작 시 해당 파일을 참조하는 디렉터리를 찾는 다는 사실을 알게됨 우선 순위에 따라 설정파일의 디렉터리를 찾는다. 설정 파일 내에서 그룹을 프로그램별로 나눈다는 사실을 알게 됨. MySQL 기동시 필요한 시스템 변수를 알게됨 글로벌, 세션 변수 구분 시스템 변수를 정적, 동적 변수로 구분하여 언제 변수 값을 바꾸고 어떻게 바꾸는지 알게 됨. 각 시스템 변수에 대한 이해가 어느 정도는 있어야 MySQL 서버를 제대로 분석하고 트러블 슈팅하며 사용할 수 있다. 발췌 SET PERSIST 명령은 세션 변수에는 적용되지 않으며, SET PERSIST 명령으로 시스템 변수를 변경하면 MySQL 서버는 자동으로 GLOBAL 시스템 변수의 변경으로 인식..
요약 서버를 시작하고 종료하기 위해 필요한 데이터 파일과 로그파일의 존재를 알게 됨. 클린 셧다운을 이용하면 MySQL 서버 기동 시 트랜잭션 복구 과정이 없이 빠르게 재기동 가능. MySQL 서버 접속(소켓, TCP/IP) 방식을 알게 됨. 2가지 MySQL 서버 업그레이드 방식과 그 장단점을 알게 됨. 특히 8.0 버전에 대한 추가 변경 사항들을 알게됨. 발췌 패스.. 메모 설정파일 & 데이터 파일 준비 MySQL 서버를 시작하기 위해서는 트랜잭션 로그 파일과 시스템 테이블이 준비되어야 함. MySQL 서버 설치시, /etc/my.cnf 설정 파일이 준비되고, MySQL 서버를 실행하는데 꼭 필요한 3~4개의 기본적인 설정만 기록돼 있음. MySQL 서버를 실행하기 위해서 초기데이터 파일 (시스템 테..
요약 MySQL 변천사와 두가지 에디션과 그 차이점을 이해할 수 있었다. DBMS 를 선택하는 기준을 정할 수 있었다. 운영체제별 MySQL 서버 설치하는 방법을 익힐 수 있었다. X Protocol 이 뭔지 이해하지 못했다.. 발췌 Q. "어떤 DBMS 를 사용해야 할지 모르겠습니다. 어떤 DBMS 가 좋은가요?" A. "자기가 가장 잘 활용 할 수 있는 DBMS 가 가장 좋은 DBMS 입니다." 이 질문의 답을 듣고도 아직 고민된다면 다음 순서로 고려하라 안정성 성능과 기능 커뮤니티 혹은 인지도 메모 MySQL 버전 5.5 to 5.7 안전성과 성능 개선에 집중 8.0 ~ 상용 DBMS 가 가지고 있는 기능들이 장착되기 시작 왜 MySQL ? 상용 DBMS 인 오라클 RDBMS 는 너무 비싸다. 비용..