본문 바로가기

MySQL/R&D

(4)
MySQL Large table drop issue 분석 (in source code) 1. 배경 DB 를 운영을 하다보면 Table Drop 을 진행할 일이 많다. DB 에 저장된 데이터는 최후의 보루이기때문에(물론 백업본이 있기는하지만), 보통은 테이블 renaming 을 통해 사용되지않는 것을 확인 후 추후 Drop 을 진행한다. InnoDB 의 Table Drop 은 file_per_table=1 일 경우, 물리적인 Table Space 자체를 없애는 것이기때문에 DB 입장에서는 테이블의 크기가 크더라도 시간이 오래 걸릴만한 작업은 아니다. 물론, Adaptive Hash Index 같은 것들이 메모리 상에 존재할 경우에는 해당 Hash map 을 해제해야하기때문에 시간이 오래 걸릴 수는 있다. 하지만 일반적인 경우에서 InnoDB 는 OS 에 unlink call 을 하고 Inno..
MySQL FlashBack (5.7 / 8.0) 1. MySQL Flashback 기본적으로 MySQL Community Version 에서는 FlashBack 을 지원하지 않는다. 해당 기능은 MariaDB 10.2.4 이상의 "mysqlbinlog" 바이너리 파일에 탑재된 기능이다. 이는 Binary Log 를 이용하여 FlashBack 을 구현하기때문에, MySQL Community Version 에서도 정상 작동한다. 차후 출시된 MariaDB 의 신규 버전에서는 DDL (DROP, TRUNCATE, ALTER 등) 에 대한 FlashBack 이 지원될 예정이나 현재 버전에서는 지원하지않는다. 또한 이는 MariaDB 에서만 사용될 것이라고 생각된다. MariaDB 10.2.4 Version 이상에서는 Server Parameter 로 "--f..
MySQL Partition Key length 이슈 (in MySQL 5.7) 1. 배경 MySQL 버전 업그레이드를 진행하다가 특정 테이블 생성이 불가능해서 살펴봤었다. 월별 파티션 같은 테이블에서는 파티션 키를 date 관련 타입이 아닌, char 관련 타입으로 가져가는 경우가 있다. 이 때, MySQL 5.7 이전 (MySQL 5.6 이하) 버전에서는 파티션 키의 크기가 파티션 range 의 범위 크기 (ex. '201801' 의 경우 크기는 6) 보다 작아도 파티션 테이블이 만들어 졌다. 그러나 MySQL 5.7 부터는 "ERROR 1654 (HY000): Partition column values of incorrect type" 에러가 발생한다. 2. 테스트 1) MySQL 5.6 > CREATE TABLE `t1` ( `reg_month` varchar(6), `con..
MySQL JSON 이 BLOB, TEXT 에 비해 느린 이유 (JSON source 분석) 배경 해당 내용은 JSON Function 을 전혀 사용하지않고, json 의 모든 값들을 Fetch 할 때의 이야기이다. ========================================================================= MySQL 에서 JSON Data 를 Client 단으로 보내줄 때 다른 Type 의 컬럼들에 비해 CPU Usage 를 많이 사용한다. 이는 MySQL 의 경우 JSON type 을 내부적으로 binary 형태로 저장하고, TEXT type 은 string 형태로 저장하기때문이다. Client 단에서 데이터를 요청했을 때, TEXT type 의 경우 type conversion 없이 string 형태 그대로 전송을 해주면되지만, JSON type 의 ..