개발/dbms
-
Mysql InnoDB 에서 OS Cache 와의 관계개발/dbms 2020. 8. 3. 21:06
정의 innodb_flush_method 설정값에 따라 In-Memory 에서 On-Disk 로 데이터를 전송할때 OS Cache 를 어떻게 활용할것인지 변경된다. 동작원리 value 설명 log file open log file flush data file open data file flush fsync (default) InnoDB 가 data file 과 log file 를 fsync() 를 호출하여 플러시한다. default fsync() default fsync() O_DSYNC InnoDB 가 log file을 플러시 할때에는 O_SYNC 를 이용하여 flush 하고 data file 은 fsync() 를 호출하여 플러시한다. O_DSYNC 를 사용하기에는 몇몇 UNIX 시스템에서 문제가 있어..
-
Mysql Undo Log 란개발/dbms 2020. 8. 3. 20:54
정의 Undo Log 란 실행 취소 로그 레코드의 집합으로 Transaction 실행후 Rollback 시 Undo Log 를 참조해 이전 데이터로 복구할수 있도록 로깅 해놓은 영역이다. 동작원리 Undo Log 레코드에는 실제 변경되는 컬럼의 이전값과 PK 값만 저장이 된다. 예를들어 user 테이블에서 age 값만 변경했다고 가정하면 변경 이전에 age 에 대한값과 PK 값만 Undo Log 레코드에 들어가게 된다. 트랜잭션 레벨이 READ UNCOMMITTED 아니라면 조회할때에 트랜잭션 중에 변경된 데이터가 Undo Log 에 있다면 Undo Log 에서 읽어간다. Recovery 시 사용되지 않는다. 트랜잭션에서 다음 유형별로 하나씩 최대 4개의 Undo Log 가 할당된다. 사용자정의 테이블에..
-
Mysql Redo Log 란개발/dbms 2020. 8. 3. 20:50
정의 Redo Log 란 DB 장애발생시 복구에 사용되는 Log 다. 동작원리 실제로 Database 에서 Commit 이 발생하면 바로 디스크 영역(Table Space)으로 들어가지 않고 메모리 영역(Buffer Poll & Log Buffer)에 들어가게 된다. 이렇게 하여 DISK I/O 를 절약할수 있다. 그런데 DB 에 장애가 발생하여서 메모리 영역에만 남아있는 데이터를 디스크 영역으로 옮겨지지 못한채 서버가 다운되는 현상이 발생했을때 복구할수 있는방법이 바로 Redo Log 이다. 복구를 한다고 해도 메모리에 있는 데이터는 전부 날아갔기 때문에 복구할수 있는 방법은 디스크에 기록된 Redo Log 파일로 복구를 해야하는데 언제 메모리에 저장되어있는 데이터를 디스크로 이동할까 ? innodb_..
-
master 와 slave 의 쿼리실행 계획이 틀려진 이유는 ?개발/dbms 2019. 9. 17. 18:08
옵티마이저는 어떻게 계획을 세울까?? 우리가 쿼리를 실행하면 현대의 똑똑한 옵티마이저는 비용(cost based) 기반의 실행계획을 설립한다. 이때 비용(cost) 에 해당하는것을 참고하려면 통계정보를 얻어와야하는데 통계정보를 다음과 같은곳에 저장한다. use mysql; show tables like '%stats%'; -------------------------------- [통합 통계 정보 테이블] column_stats index_stats table_stats [스토리지 엔진 통계 정보 테이블] innodb_index_stats innodb_table_stats [스토리지 엔진 통계 정보 테이블] 을 사용하려면 innodb_stats_persistent 값이 ON 상태값이 되어있어야하는데 다음..
-
mysql 을 두개 설치해보자개발/dbms 2018. 11. 9. 17:46
현재 mysql5.5 -> maria10.2 설치하기에 앞서 리눅스 피시에 maria10.2 설치를 해야하는 상황이 왔다. 다른 가상서버 혹은 docker 로 설치진행해도 되지만 옮겨야하는 데이터디렉토리 용량이 800g가 넘기때문에 그냥 리눅스 피시에 설치를 진행하도록 하겠다.소스코드 설치로 진행한다.1.컴파일을 하기위한 라이브러리 설치yum install cmake ncurses ncurses-devel bison gcc gcc-c++ -y2.source code 를 다운로드한다.cd /usr/local/src wget -N https://downloads.mariadb.org/interstitial/mariadb-10.2.7/source/mariadb-10.2.7.tar.gz tar zxvf mari..
-
Inoodb buffer pool 이란 ?개발/dbms 2018. 11. 9. 17:44
'mysql' innodb buffer pool 설정에 관해서 알아보자. 현재 내가 맡고 있는 업무는 사내프로젝트 유지보수를 하고있다. 문제가있는 테이블은 현재 정규화가 되어있지 않으며, 컬럼수는 약 100개 정도, 약 천만건정도의 데이터가 쌓여있으며 총 데이터 크기 60G , 인덱스길이 2G 정도 된다. DB 서버는 웹서버와 분리되어있지 않으며 현재 서버메모리는 8G . 모든 쿼리는 인덱스를 타지만, slow query 가 많이올라오고 loadaverage 는매일 업무가 시작되는 9시 10 이상 튄다. 소스가 오래되었기에, 테이블을 정규화해서 고치기에는 리스크가 너무컸다. 어떻게 하면 리스크없이 부하를 잡을수있을까 고민하던 찰나에 얼마전 읽은 `대규모 서비스를 지탱하는 기술` 책에서 캐시(os 캐시)를..
-
mariadb 에서 connected by 를 써보자!개발/dbms 2018. 11. 9. 17:43
oracle 에서 사용할수있는 connect by 가 mariadb 10.2 버전이후로부터는 아래와 같이 지원된다.1. 테이블 생성CREATE TABLE `menu` ( `idx` int(11) NOT NULL AUTO_INCREMENT, `parents_idx` int(11) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`idx`), KEY `menu_menu_idx_fk` (`parents_idx`), CONSTRAINT `menu_menu_idx_fk` FOREIGN KEY (`parents_idx`) REFERENCES `menu` (`idx`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=..