Database(22)
-
MySQL Partition, 제대로 사용하기 (2)
MySQL의 Parition 의 사용법을 알아보며 실제 저장 과정을 분석하는 것이 본 포스팅의 목표입니다. 지난 포스팅 MySQL Partition, 제대로 이해하기 (1)에 이어 이번 포스팅은 Parition의 사용법에 대해 다루고자 합니다. Partition이란 논리적으로 하나의 테이블이지만 실제로는 여러 개의 테이블로 분리해서 관리하는 기능입니다. 마치 동일한 형식의 한 개의 테이블을 사용하고 있는 것 같지만, 실제적으로는 여러 개의 물리 파일로 데이터들을 분할하여 보관하는 방식입니다. 이번 포스팅에서는 파티션을 적용하는 방식과 데이터들의 실제 물리적인 저장 과정을 살펴보겠습니다. Create Patition 파티션을 생성하는 구문은 아래와 같습니다. CREATE TABLE table_name PA..
2022.09.07 -
MySQL Partition, 제대로 이해하기 (1)
MySQL의 Parition 개념과 특징을 알아보는 것이 본 포스팅의 목표입니다. 안녕하세요. 이번 포스팅은 Parition에 대해 다루고자 합니다. Parition은 대용량 데이터를 처리해야한다면 반드시 알아둘 필요가 있습니다. 이번 포스팅에서는 전반적인 이해와 원리를 다루며, 이어지는 포스팅 MySQL Partition, 제대로 사용하기 (2) 에서 실제 사용법에 대해 다룹니다. 해당 포스팅의 모든 도식은 직접 그린 것으로 출처를 명시하셔야 합니다. Partition? Partition이란 논리적으로 하나의 테이블이지만 실제로는 여러 개의 테이블로 분리해서 관리하는 기능입니다. 마치 동일한 형식의 한 개의 테이블을 사용하고 있는 것 같지만, 실제적으로는 여러 개의 물리 파일로 데이터들을 분할하여 보관..
2022.09.06 -
MySQL Architecture, 제대로 이해하기
MySQL Server의 구조를 파악하는 것이 본 포스팅의 목적입니다. MySQL Architecture TLDR; MySQL 서버는 크게 MySQL Engine과 Storage Enigne으로 구분할 수 있습니다. ✔️ MySQL Engine: 요청된 SQL 문장을 분석하거나 최적화 등 처리. 논리적인 면에서 두뇌의 역할 ✔️ Storage Engine: 손발 역할. 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어옴 여기서 중요한 점은 하나의 쿼리 작업은 여러 하위 작업으로 나뉘는데, 각 하위 작업이 MySQL 엔진 영역에서 처리되는지 아니면 스토리지 엔진 영역에서 처리되는지 구분할 줄 알아야 한다는 점입니다. Big Picture 위의 그림을 위에서 부터 살펴보면 Cli..
2022.08.21 -
Paging Optimization - Covering Index
Paging 시 성능 개선을 위해 No Offset 방식과 Covering Index를 활용하는 것이 해당 포스팅의 목표입니다. 지난 포스팅은 Covering Index에 대해 다뤘습니다. 사실,,, 졸면서 쓰다가 잠들어 버려서 급하게 정리했다가 다시 내용을 추가했습니다 🥲 지난 주부터 해야할게 화수분 뺨치게 쏟아지네요 🫠 이번 포스팅은 이 Covering Index를 사용해서 성능을 개선하는 방법에 대해 다루고자 합니다. 데이터베이스 성능 개선이기 때문에 Spring 뿐만 아니라 모든 곳에서 활용할 수 있습니다. Paging 일반적인 웹 서비스에서 Paging은 아주 흔하게 사용되는 기능입니다. 간혹 Paging과 Pagination이라는 단어를 둘 다 확인 할 수 있는데요. 궁금해서 찾아보았는데, 아..
2022.08.01 -
Covering Index, 성능 테스트
MySQL에서 성능 개선을 위해 Covering Index가 무엇인지, 추가로 그 배경 지식인 Index와 관련된 내용을 살피는 것이 해당 포스팅의 목표입니다. 안녕하세요. 이번 포스팅에서는 MySQL의 Covering Index에 대해 다루고자 합니다. Covering Index를 이해하기 위해서는 MySQL의 Index 구조와 Execution Plan 지식이 요구됩니다. Execution Plan에 대한 이해는 'SQL Execution Plan, 제대로 이해하기'을 참고하실 수 있고, Index와 관련된 내용은 'MySQL Index, 제대로 알아보기'을 참고하실 수 있습니다. B-Tree MySQL의 InnoDB는 기본적으로 인덱스를 B$^+$-Tree의 자료구조로 생성합니다. B$^+$-Tre..
2022.07.27 -
Bulk UPSERT 성능 테스트 - Spring
본 포스팅의 목표는 Spring - Mabatis 에서 ON DUPLICATE KEY UPDATE를 이용한 대량의 데이터를 추가/업데이트하는 것입니다. 안녕하세요. 이번 포스팅은 대량의 데이터를 업데이트할 때 효과적인 두 번째 방법 소개하고자 합니다. MySQL 이나 MariaDB에서 INSERT와 UPDATE를 여러 개를 한 번에 실행할 수 있는 ON DUPLICATE KEY UPDATE 구문입니다. 테스트를 통해 어느정도의 시간이 걸리는지를 확인해보겠습니다. 첫 번째 방법은 지난 포스팅에서 다룬 MySQL의 Temporary Table를 사용하는 것이었는데요. Temporary Table과의 속도 비교도 같이 진행할 예정입니다. ON DUPLICATE KEY UPDATE를 이용한 UPSERT는 MyB..
2022.07.13