MySQL (9) 썸네일형 리스트형 [Real MySQL] MySQL 의 잠금 : MySQL 엔진 잠금 들어가며 이번 글에서는 MySQL에서 사용되는 잠금(Lock) 중에서 MySQL 엔진 레벨의 잠금에 대해 살펴보려고 한다. MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 미치기 때문에, 각 잠금의 특징과 어느 시점에 사용되는지 알아둬야 한다. 지금부터 한번 살펴보도록 하자. 글로벌 락 (Gloabl Lcok) MySQL의 잠금 가운데 범위가 가장 큰 잠금이다. FLUSH TABLES WITH READ LOCK 명령으로 획득할 수 있다. 글로벌 락은 MySQL 서버 전체에 영향을 미친다. 작업 대상 테이블이나 데이터베이스가 달라도 영향을 미친다는 뜻이다. 일단 하나의 세션에서 글로벌 락을 획득하면, 다른 세션에서 SELECT 를 제외한 대부분의 DDL 문장이나 DML 문장을 실행하는 경우 글로벌 락.. [Real MySQL] 트랜잭션과 트랜잭션 격리 수준 (isolation level) 트랜잭션이란? (transaction) 트랜잭션(transaction)이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 트랜잭션은 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있어야 한다. 즉, ACID 를 보장해야 한다. 트랜잭션은 위와 같이 정의 내릴 수 있다. 다만, 처음 마주한다면 이해하기에 조금 어려움을 겪을 수 있다. 먼저 트랜잭션이 보장해줘야 하는 ACID 가 무엇인지 간단히 살펴보자. 원자성 (Atomicity) : 트랜잭션 내에서 실행한 작업들은 "모두 성공하거나, 모두 실패하거나" 여야 한다. 쉽게 말하면 "모 아니면 도" 인 것이다. 일관성 (Consistency) : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어, 데이터베이스에서 정.. [Real MySQL] 테이블 스페이스와 Double Write Buffer - InnoDB 스토리지 엔진 아키텍처 : On-Disk Structures InnoDB 스토리지 엔진 아키텍처 InnoDB 스토리지 엔진은 현재 MySQL의 스토리지 엔진 중 가장 많이 사용된다. InnoDB 는 MySQL 에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하기 때문에 높은 동시성 처리가 가능하며 안정적이고 성능이 뛰어나다. 테이블 스페이스 (Tablespace) InnoDB 스토리지 엔진에서 테이블을 생성할 때, 테이블 데이터와 인덱스 데이터를 저장할 위치를 지정할 수 있다. 이러한 위치를 테이블 스페이스(Tablespace)라고 한다. InnoDB 스토리지 엔진은 다섯 가지 유형의 테이블 스페이스를 제공한다. 시스템 테이블 스페이스(System Tablespace), 일반 테이블 스페이스(General Tablespace), 파일.. [Real MySQL] 어댑티브 해시 인덱스 - InnoDB 스토리지 엔진 아키텍처 : In-Memory Structures 어댑티브 해시 인덱스 (Adaptive Hash Index) 어댑티브 해시 인덱스(Adaptive Hash Index)는 사용자가 수동으로 생성하는 인덱스가 아닌, InnoDB 스토리지 엔진에서 사용자가 자주 요청하는 데이터에 대해 자동으로 생성하는 인덱스이다. 데이터 페이지를 메모리(버퍼 풀) 내에서 접근하는 것을 더 빠르게 만드는 기능이다. B-Tree 검색 시간을 줄여주기 위해 도입되었다. InnoDB 스토리지 엔진은 자주 읽히는 데이터 페이지의 키 값을 이용해 해시 인덱스를 만든다. 필요할 때마다 어댑티브 해시 인덱스를 검색해서 레코드가 저장된 데이터 페이지를 즉시 찾아간다. B-Tree 에서 루트 노드부터 리프 노드까지 찾아가는 비용이 없어지고, 그만큼 CPU 는 적은 일을 하며 쿼리의 성능을 .. [Real MySQL] 체인지 버퍼 - InnoDB 스토리지 엔진 아키텍처 : In-Memory Structures InnoDB 스토리지 엔진 아키텍처 InnoDB 스토리지 엔진은 현재 MySQL의 스토리지 엔진 중 가장 많이 사용된다. InnoDB 는 MySQL 에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하기 때문에 높은 동시성 처리가 가능하며 안정적이고 성능이 뛰어나다. 체인지 버퍼 (Change Buffer) 체인지 버퍼(Change Buffer)는 InnoDB 스토리지 엔진의 버퍼 풀의 일부로, 보조 인덱스(세컨더리 인덱스) 페이지에 대한 변경 사항을 캐시하는 특수한 데이터 구조이다. 이러한 변경 사항은 INSERT, UPDATE 또는 DELETE 작업(DML)의 결과일 수 있으며, 해당 페이지가 다른 읽기 작업에 의해 버퍼 풀에 로드될 때 나중에 병합된다. 또한 체인지 버퍼.. [Real MySQL] 버퍼 풀, 로그 버퍼 - InnoDB 스토리지 엔진 아키텍처 : In-Memory Structures InnoDB 스토리지 엔진 아키텍처 InnoDB 스토리지 엔진은 현재 MySQL의 스토리지 엔진 중 가장 많이 사용된다. InnoDB 는 MySQL 에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하기 때문에 높은 동시성 처리가 가능하며 안정적이고 성능이 뛰어나다. 버퍼 풀 (Buffer Pool) 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 메모리 공간이다. 쓰기 작업을 지연시켜 일괄 처리할 수 있도록 해준다. 일반 애플리케이션에서는 INSERT, UPDATE, DELETE 와 같은 DML이 데이터 파일의 이곳저곳에 위치한 레코드를 변경하기 때문에 랜덤한 디스크 작업을 발생시킨다. 이때 버퍼 풀이 이러한 변경된 데이터를 모아서 처리하여 랜덤한 디스크 작업의 .. [Real MySQL] MySQL 엔진 아키텍처 MySQL 아키텍처 먼저 위 그림을 천천히 살펴보자. 프로그래밍 API MySQL은 대부분의 프로그래밍 언어에서 사용할 수 있는 드라이버를 제공한다. 대표적으로 Java 에서 사용하는 JDBC가 있다. 이외에도 ODBC, PHP MySQL 드라이버, .NET MySQL 드라이버 등이 있다. 이러한 드라이버를 이용해 자바, C/C++, PHP, 파이썬, 루비 등 모든 언어로 MySQL 서버에서 쿼리를 사용할 수 있도록 지원한다. MySQL 엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하고, 요청된 SQL 문장을 분석하고 최적화 하는 등 DBMS 의 두뇌에 해당하는 작업을 수행한다. 커넥션 핸들러 클라이언트로부터의 접속 및 쿼리 요청을 처리한다. SQL 파서 및 전처리기 SQL 파서는 .. [Real MySQL] MySQL 사용자 및 권한 관리하기 들어가며 MySQL에서 사용자는 데이터베이스에 접근하고 조작할 수 있는 권한을 갖는 개체이다. 사용자는 로그인 정보와 권한을 가지고 있으며, 데이터베이스 서버에 로그인하여 데이터베이스와 테이블을 관리할 수 있다. 권한은 데이터베이스 관리자에 의해 설정되며, 필요에 따라 추가 및 수정할 수 있다. 이번 글에서는 MySQL 에서 사용자와 권한에 대한 내용을 다룬다. 사용자 식별 MySQL 의 사용자 계정은 사용자의 아이디와 해당 사용자의 IP 주소 (클라이언트가 실행된 호스트명, 도메인 또는 IP 주소)를 확인한다. 그렇기 때문에 계정을 언급할 때는 아이디와 호스트를 함께 언급한다. 아마 다들 한번쯤 봤을 형식일거다. 'user_id'@'127.0.0.1' 위 사용자 계정은 항상 MySQL 서버가 가동 중인.. [AWS/EC2] Amazon Linux 서버에 MySQL, Nginx 설치하기 맨날 하면서 기억 안나는 Amazon Linux 서버에 mysql, nginx 설치하는 법만 요약해둔 글입니다 MySQL 설치 1. yum설치 파일 가져오기 sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm 2. 설치파일에 필요한 key 수동 import rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 3. 가져온 파일과 key값을 yum에 업데이트 sudo yum update 4. 설치 sudo yum install mysql-community-server Nginx 설치 이미 시도해서 알겠지만 sudo yum install nginx.. 이전 1 다음