Database
-
[MySQL] BufferPool Instance 와 쿼리 성능 관계 알아보기 (innodb_buffer_pool_instances)Database/MySQL 2024. 6. 24. 05:27
- 목차 들어가며.이번 글에서는 MySQL 의 BufferPool Instance 와 쿼리 실행 속도의 관계에 대해서 알아보려고 합니다.MySQL 은 BufferPool 이라는 자체적인 메모리 캐싱 구조를 가집니다.즉, 버퍼풀이 수용할 수 있는 만큼의 용량의 데이터들을 메모리에 유지하려고 합니다.만약에 버퍼풀의 크기가 4gb 로 설정되어 있다만 이만큼의 레코드나 인덱스 등의 여러 데이터들이 메모리에 캐싱될 수 있습니다.그리고 BufferPool 은 MySQL 내부에서 단 한개만 존재하는 것이 아니라 설정을 통해서 여러개의 Instance 를 생성할 수도 있습니다. 만약에 BufferPool Instance 가 2개 이상이 존재한다면, 이들은 Hashing 이나 Modulo 연산 등을 통해서 데이터들이 여..
-
[MySQL] File Sort 알아보기 ( sort_buffer_size , filesort )Database/MySQL 2024. 6. 22. 07:50
- 목차 들어가며.MySQL 은 ORDER BY 키워드가 적용된 Select Query 를 수행할 때에 내부적으로 데이터 정렬을 수행합니다.데이터의 사이즈가 적은 Query 의 경우에는 기본적으로 메모리 영역에서 정렬을 수행합니다.하지만 정렬해야하는 데이터의 규모가 메모리에서 수행할 수 없는 큰 규모인 경우에는 Disk 와 File 의 도움을 받습니다.이러한 정렬을 File Sort 라고 부릅니다. Sort Buffer 란 ?MySQL 에서 Client 와 mysqld 가 서로 Connection 을 맺게 되면, MySQL 내부에서 하나의 Thread 가 생성됩니다.이는 Session, Connection, Process, Thread 등 여러가지 표현으로 불리는데, show processlist; 쿼리..
-
[MySQL] Assigned, Completed, Written, Flushed / Redo Log 가 처리되는 과정 알아보기Database/MySQL 2024. 6. 22. 07:49
- 목차 들어가며.이번 들에서는 Redo Log 가 생성되는 과정을 알아보려고 합니다.Redo Log 는 MySQL 내부적으로 메모리/디스크 영역에서 생성 및 저장되는 구조를 취하기 때문에 시각적으로 확인하긴 어렵지만,show engine innodb status; 명령어를 통해서 확인하는 방법을 소개하려고 합니다. Redo Log 란 ?Redo Log 는 MySQL 에서 발생하는 DML 쿼리들을 기록합니다.Insert, Update, Delete 쿼리를 Redo Log 파일 내부에 저장하게 됩니다.Redo Log 의 용도는 Crash Recovery 를 목적으로 합니다.만약 MySQL 이 급작스럽게 종료되었을 때에 Redo Log 에 기록된 변경사항을 토대로 이전 상태를 복구하게 됩니다. Redo Lo..
-
[MySQL] innodb_rollback_on_timeout 알아보기 (Lock wait timeout exceeded; try restarting transaction)Database/MySQL 2024. 6. 19. 07:02
- 목차 들어가며.innodb_rollback_on_timeout 은 MySQL InnoDB 스토리지 엔진에서 트랜잭션이 잠금 대기 시간 초과(lock wait timeout) 에 도달했을 때, 해당 트랜잭션을 롤백하는 방식을 결정하는 시스템 변수입니다.innodb_rollback_on_timeout 설정값은 OFF 또는 ON 을 가집니다.기본값은 OFF 입니다. innodb_rollback_on_timeout 이 ON 으로 설정되었을 때에,SQL Session 이 Lock 을 획득하기 위한 대기 시간이 innodb_lock_wait_time 으로 설정된 시간을 초과한다면,SQL Session 이 Rollback 되며 Transaction 이 종료됩니다. 반면에 innodb_rollback_on_time..
-
[ClickHouse] remote_servers 설정 알아보기Database/Clickhouse 2024. 6. 3. 06:08
- 목차 들어가며.ClickHouse 는 분산 테이블(Distributed Table) 을 통해 여러 노드에서 데이터를 처리하고 저장할 수 있습니다.이때, 각 노드 간 통신 및 데이터 분배를 위해 remote_servers 설정이 필수적입니다.remote_servers 설정을 통해서 샤딩(Sharding) 과 복제(Replication) 를 구성할 수 있습니다. 샤딩(Sharding): 데이터를 여러 노드에 나누어 저장하여, 저장 용량을 확장하고 쓰기 및 읽기 성능을 높이는 기술복제(Replication): 동일한 데이터를 여러 노드에 복제하여, 데이터 손실 방지와 장애 복구를 가능하게 하는 기술 ClickHouse 는 이 두 가지를 기반으로 수평 확장이 가능한 분산 데이터베이스를 제공합니다.이 과정에서..
-
[ClickHouse] min_insert_block_size_rows 설정 알아보기Database/Clickhouse 2024. 6. 2. 07:21
- 목차 들어가며.ClickHouse 는 MergeTree 엔진을 통해 데이터를 효율적으로 관리합니다.MergeTree 엔진은 데이터를 part 라는 단위로 관리하며, 각 part 는 데이터의 정렬된 블록을 포함합니다.min_insert_block_size_rows 는 데이터 삽입(INSERT) 시 디스크로 데이터를 플러시(Flush)하는 기준이 되는 최소 행(row) 크기를 정의하는 중요한 설정입니다. min_insert_block_size_rows 설정은 클라이언트가 INSERT 쿼리를 실행할 때, 디스크로 데이터를 플러시(Flush)하기 위한 최소 행(Row) 수를 정의하는 기준입니다.예를 들어, min_insert_block_size_rows 값이 10으로 설정되어 있고, 클라이언트가 100개의 ..
-
[ClickHouse] Logger 설정하기Database/Clickhouse 2024. 6. 2. 07:21
- 목차 들어가며.ClickHouse 는 Logger 설정을 통해 서버 동작과 관련된 다양한 정보를 효율적으로 관리할 수 있습니다.로깅 시스템을 활용하면 콘솔 출력, 파일 출력, 그리고 로그 파일의 위치 및 크기를 포함한 세부적인 설정을 사용자 환경에 맞게 조정할 수 있습니다.이러한 설정은 시스템 운영 중 발생하는 문제를 빠르게 파악하고, 로그 데이터를 체계적으로 관리하는 데 중요한 역할을 합니다. 이 글에서는 ClickHouse 의 Config xml 파일을 통해서 정적으로 Logger 를 설정하는 방식에 대해서 다루어보도록 하겠습니다. Console 출력 설정하기.ClickHouse 는 Console 출력을 통해 실시간으로 서버 동작 상태를 확인할 수 있는 기능을 제공합니다.Console 출력은 특히..
-
[ClickHouse] Mutation 알아보기Database/Clickhouse 2024. 4. 13. 07:29
- 목차 들어가며.Mutation 은 테이블의 데이터를 수정하거나 삭제하는 작업을 의미합니다.이는 ALTER TABLE ... DELETE 또는 ALTER TABLE ... UPDATE 와 같은 명령어로 실행되며, 백그라운드에서 비동기적으로 처리됩니다.Mutation은 MergeTree 엔진을 사용하는 테이블에서 지원되며, 데이터 파트를 새로운 버전으로 재작성하여 변경사항을 적용합니다. ClickHouse 의 Mutation 은 일반적인 관계형 데이터베이스 관리 시스템(RDBMS)의 DELETE 및 UPDATE 연산과 유사한 동작으로 생각하시면 됩니다.하지만 차이점들이 존재합니다. Mutation 은 ALTER TABLE 과 같이 DDL 형식으로 실행됩니다.MySQL 과 같은 DB 에서 DELETE, U..
-
[MySQL] foreign_key_checks 알아보기Database/MySQL 2024. 3. 26. 07:29
- 목차 들어가며. 이번 글에서는 MySQL 의 테이블 간 외래키 제약 (Foreign Key Constraints) 을 On/Off 할 수 있는 설정인 foreign_key_checks 에 대해서 알아보려고 합니다. On and Off foreign_key_checks. MySQL 실행하기. 먼저 실습을 위해서 도커를 활용한 MySQL 서버를 실행시켜보겠습니다. docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:8.0.23 그리고 Foreign Key 관계의 테이블 2개를 생성해보겠습니다. docker exec -it mysql mysql -uroot -p1234 create database test; use test; ..
-
[ClickHouse] Distributed Table 알아보기Database/Clickhouse 2024. 3. 18. 07:04
- 목차 들어가며.이번 글에서는 ClickHouse 의 Distributed Table 에 대해서 알아보는 시간을 가지겠습니다.먼저 3개의 Shard 과 2개의 Replica 를 가지는 ClickHouse 구조를 Docker Compose 를 통해서 실행합니다. config.xml 설정 파일은 아래와 같습니다.3개의 Shard 로 구성되며 각 Shard 는 2개의 Replica 를 가집니다.그리고 3개의 Zookeeper 가 상태 저장소로써 동작합니다. cat /tmp/config.xml zookeeper1 2181 zookeeper2 2181 ..