Open IAM20 opened 2 years ago
MyISAM
스토리지 엔진 아키텍처4.2.13 에 설명했듯이 거의 Deprecated 급의 엔진인듯. 가볍게 넘어갑시당.
사용자 키 캐시 추가하기
먼저 시스템 파라미터를 추가하고
key_buffer_size = 4GB
kbuf_board.key_buffer_size = 2GB
kbuf_comment.key_buffer_size = 2GB
각 테이블 인덱스가 사용할 캐시를 생성한다.
CACHE INDEX db1.board, db2.board IN kbuf_board;
CACHE INDEX db1.comment, db2.comment IN kbuf_comment;
왜 있는지 모르겠는 장.
앞서 버퍼가 없다고 했는데, 없어서 DISK I/O 는 항상 운영체제의 캐시와 버퍼를 사용한다. 운영체제의 디스크 캐시는 보통 남는 메모리를 사용한다. 따라서 운영체제의 디스크 캐시를 사용할 수 있도록 키 캐시는 최대 물리 메모리의 40% 이하로 설정하자.
고정길이 ROWID
가변길이 ROWID
myisam_data_pointer_size
를 8 이상으로 설정하면 64PB
이상으로 가져갈 수 있다
4.2.8 Double write buffer
Partial-page, Ton-page
Double write
시스템 재시작시 DoubleWrite 버퍼의 내용과 실제 내용을 비교하여 복구한다.
4.2.9 언두 로그
언두로그는 DML 시에 항상 생성된다. DML 이 실행되면 실제 파일에 변화를 기록하고 이전 데이터는 언두로그에 쓰는 방식이다.
4.2.9.1 언두 로그 모니터링
다행히 8.0 부터는 자동으로 언두 로그를 줄여주고 한다. (GC ...?) 언두 로그 레코드의 수를 모니터링 하는 것이 좋다.
4.2.9.2 언두 테이블스페이스 관리
언두 테이블스페이스
역사
ibdata.ibd
에 저장되었음.innodb_undo_tablespaces
를 2보다 큰 값으로 설정하면 별도의 언두 로그 파일을 사용Deprecated
항상 언두 로그 파일 사용.CREATE UNDO TABLESPACE, DROP TABLESPACE
구성
Undo tablespace truncate
innodb_purge_rseg_truncate_frequency
값 조정으로 빈도 조절가능.ALTER UNDO TABLESPACE :tablespace_name SET INACTIVE
형태로 비활성화 하면 퍼지가 가져감.4.2.10 체인지 버퍼
INSERT
,DELETE
,UPDATE
세 가지 모두 사용 가능하다.DELETE
는 필요없는데? 하시면innodb_change_buffering
값을 수정하면 된다.all
: 전체를 버퍼링none
: 난 버퍼 필요없어.inserts
: 인덱스에 새로운 레코드 추가만 버퍼링deletes
: 인덱스에서 삭제만 버퍼링changes
:inserts
+deletes
purges
: 영구적으로 삭제하는 작업만 버퍼링innodb_change_buffer_max_size
로 비율 수정 가능하다.체인지 버퍼의 모니터링
아래 쿼리를 실행하여 사용중인 메모리를 확인할 수 있다.
오퍼레이션 처리 횟수는 아래 명령어로 알 수 있다.
4.2.11 리두 로그 및 로그 버퍼
리두 로그는 ACID 의 D 와 연관이 깊다. 서버가 비정상적으로 종료되었을 때 데이터 파일에 기록되지 못한 데이터를 잃지 않게 해주는 안전장치다.
innodb_flush_log_at_trx_commit
이라는 시스템변수로 동작을 정할 수 있다.비정상 종료를 복구시키는 방법
4.2.11.1 리두 로그 아카이빙
사용 절차
SET GLOBAL innodb_redo_log_archive_dirs='backup:/var/log/mysql_redo_archive';
DO innodb_redo_log_archive_start('backup', '20200722');
아카이빙을 종료하고 싶을 때는
DO innodb_redo_log_archive_stop();
실행4.2.11.2 리두 로그 활성화 및 비활성화
ALTER INSTANCE DISABLE INNODB REDO_LOG;
로 비활성화 할 수 있다.ALTER INSTANCE ENABLE INNODB REDO_LOG;
작업이 완료되면 꼭 다시 활성화 하자.리두로그가 비활성화된 채로 MySQL 이 비정상 종료가 되면, 데이터는 그야말로 대혼돈이기 때문에 (10시의 버전과 10시 1분 버전의 혼재) 꼭 다시 활성화 해주자.
4.2.12 어댑티브 해시 인덱스
장점
단점
이처럼 trade-off 가 극명하기 때문에 써야할 때와 쓰지 말아야할 때를 가려야 합니다.
써야할 때
안써도 되는 때
해시 인덱스가 사용하고 있는 메모리에 비해 히트율이 굉장히 낮다면, 비활성화를 고려해보아야 합니다. (이거 완전 캐시..)
어댑티브 해시 인덱스의 메모리 사용량은 아래 쿼리로 확인 가능하다
4.2.13 InnoDB와 MyISAM, MEMORY 스토리지 엔진 비교