[MySQL] 디스크 읽기방식
·
DB/MySQL
디스크 읽기 방식디스크 I/O의 오버헤드를 줄이는 것이 데이터베이스의 성능 튜닝의 중요 지점일 때가 많습니다.디스크 별로 어떻게 데이터를 읽는지에 대해서 알면 MySQL의 성능 이점이 어떻게 동작하는지 이해할 수 있습니다. 하드 디스크 드라이브(HDD)하드 디스크 드라이브는 아래와 같이 생겼습니다.여기서 보이는 헤드를 기반으로 플래터를 돌려가면서 디스크를 읽어서 데이터를 쓰고 지우는 작업을 수행합니다.헤더에 데이터가 쓰이는 부분을 맞춰야하기 때문에 디스크의 헤더가 움직여야하고 이러한 하드웨어적 동작 때문에 지연이 발생합니다. 솔리드 스테이트 드라이브(SSD)SSD는 하드 디스크에 존재하던 플래터를 제거하고 플래시 메모리를 적용하였습니다. 이로 인해 디스크 원판을 회전하는 동작이 없어져 HDD 비해 빠..
[MySQL] MySQL InnoDB의 인덱스 기반의 잠금
·
DB/MySQL
MySQL의 스토리지 엔진MySQL에는 여러 스토리지 엔진이 존재합니다. 예시로 MyISAM, Memory, InnoDB가 존재합니다.우리가 웹 개발에 자주사용하는 엔진은 InnoDB이며 실제로 MySQL의 기본 스토리지 엔진은 InnoDB로 구축되어있습니다.그래서 우리는 아래와 같이 테이블을 생성하더라도 자동으로 InnoDB로 구축해줍니다.CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100));물론 같은 데이터베이스 내에서 서로 다른 엔진을 가진 테이블을 구성할 수도 있습니다.-- InnoDB 엔진 사용CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100)) ENGINE=InnoD..
[MySQL] 날짜 및 시간 계산 함수 정리
·
DB/MySQL
MySQL 날짜 및 시간 계산 함수 정리DATE_ADD, DATE_SUB, DATEDIFF, TIMEDIFF, PERIOD_DIFF, TIMESTAMPDIFF, DATE_FORMAT 1. DATE_ADD – 날짜 또는 시간 더하기목적지정한 날짜에 일정 시간 간격을 더할 때 사용문법DATE_ADD(date, INTERVAL n UNIT)예시SELECT DATE_ADD('2024-01-01', INTERVAL 7 DAY); -- '2024-01-08'SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR); -- 현재 시간 + 1시간SELECT DATE_ADD(NOW(), INTERVAL -1 MONTH); -- 현재 시간 -1개월특징INTERVAL 단..
[MySQL] SQL 숫자 처리 함수 완벽 정리
·
DB/MySQL
SQL 숫자 처리 함수 완벽 정리FORMAT / ROUND / TRUNCATE 비교와 사용법 1. FORMAT – 숫자를 쉼표 포함한 문자열로 포맷목적숫자를 #,###.## 형식의 문자열로 변환하여 출력천 단위 쉼표(,) 자동 삽입, 지정한 소수 자릿수에서 반올림예시SELECT FORMAT(1234567.891, 2); -- 결과: '1,234,567.89'SELECT FORMAT(1234567, 4); -- 결과: '1,234,567.0000'특징반환 타입은 문자열 (VARCHAR)숫자 연산에는 부적합 (캐스팅 필요)반올림 처리가 자동 적용됨가독성을 위한 출력 전용 함수 2. ROUND – 소수점 반올림목적소수점 이하를 지정된 자리수에서 반올림문법ROUND(number, decimal..
[Redis][실전레디스] 레디스 트랜잭션 MULTI-EXEC & Lua 스크립트
·
DB/Redis
Redis의 트랜잭션과 원자적 처리 방식Redis는 기본적으로 단일 스레드 기반으로 동작하며, 이를 활용한 단순한 트랜잭션 기능과 고급 제어를 위한 Lua 스크립트 기능을 제공합니다. 이 글에서는 Redis의 트랜잭션 개념과 그 한계, 그리고 Lua 스크립트를 통한 원자적 처리 방식에 대해 설명합니다. 1. Redis 트랜잭션 (MULTI / EXEC)Redis의 트랜잭션은 RDBMS의 ACID 트랜잭션과는 다르게, 명령어를 일괄적으로 순차 실행하는 방식입니다. 사용 예시MULTISET key1 "value1"SET key2 "value2"EXECMULTI로 트랜잭션을 시작하고,여러 명령을 큐에 쌓은 뒤,EXEC 명령을 통해 한 번에 실행합니다. 특징트랜잭션 내부의 명령어는 순차적으로 실행되며, 실행 중..
[Redis][실전레디스] 레디스 운용관리 - 스냅샷 심화
·
DB/Redis
Redis 스냅샷(RDB: Redis Database File)RDB는 Redis의 데이터를 특정 시점에 복제해 디스크에 저장하는 방식입니다. 이 저장본을 **스냅샷(Snapshot)**이라고 하며, .rdb 파일로 저장됩니다. Redis 서버가 재시작되면 해당 파일을 불러와 데이터를 복원합니다. RDB 저장 트리거 (자동 + 수동)1. 자동 저장설정 파일(redis.conf)에서 save 옵션으로 조건 정의조건 중 하나라도 만족하면 RDB 스냅샷 생성save 900 1 # 15분(900초) 동안 1개 이상의 키 변경 발생 시 저장save 300 10 # 5분 동안 10개 이상save 60 10000 # 1분 동안 1만 개 이상 2. 수동 저장명령어 사용SAVE: 동기식 저장 (Redis가 멈추고 저장 ..
[Redis][실전레디스] 레디스 운용관리 - 스냅샷 & AOF
·
DB/Redis
Redis 데이터 영속성(Persistence)에 대한 이해와 운영관리 관점의 접근Redis는 대표적인 인메모리 데이터 저장소로, 빠른 응답성과 높은 처리량을 강점으로 갖고 있습니다. 하지만 그 특성상 서버가 종료되거나 장애가 발생하면 메모리에 존재하던 데이터가 모두 유실될 수 있다는 단점도 내포하고 있습니다. 이를 보완하기 위해 Redis는 데이터 영속성(Persistence) 기능을 제공하며, 이는 운영관리 측면에서 서비스의 안정성과 신뢰성을 확보하는 데 매우 중요한 요소입니다.Redis는 두 가지 방식의 영속성 메커니즘을 지원합니다. 각각의 방식은 장단점이 뚜렷하므로, 서비스 특성과 운영 전략에 따라 적절히 선택하거나 병행하여 사용하는 것이 중요합니다. 데이터 영속성 관리1. RDB 스냅샷 (Red..
[MySQL][MAC] brew services start mysql와 mysql.server start 차이
·
DB/MySQL
brew services start mysql와 mysql.server start는 MySQL을 시작하는 두 가지 다른 방법입니다. 이 둘 사이의 주요 차이점은 관리 방법과 사용되는 시스템 서비스 관리자에 있습니다. 각각에 대해 자세히 설명하겠습니다. brew services start mysql Homebrew 서비스를 사용: macOS에서 Homebrew 패키지 매니저를 통해 설치된 MySQL 인스턴스를 시작합니다. Homebrew는 macOS (또는 Linux)용 패키지 매니저로, 소프트웨어의 설치와 관리를 쉽게 해줍니다. 백그라운드에서 실행: brew services start mysql 명령은 MySQL을 백그라운드 서비스로 시작합니다. 이는 시스템 부팅 시 MySQL이 자동으로 시작되도록 설정..
개발자 성현
'DB' 카테고리의 글 목록