본문 바로가기
728x90

개발/MySql13

파티션(Partition) 1. 파티션(Partition)이란? MySQL 서버 입장에서 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션이다. 일반적으로 DBMS의 파티션은 하나의 서버에서 테이블을 분산하는 것이며, 원격 서버 간에 분산을 지원하는 것은 아니다. 2. 파티션을 사용하는 이유 한 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적인 예이다. 3. 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 레코드를 변경하는 쿼리를 실행하면 인덱스의 변경을 위한 부가적인 작업이 발생한다. 이때 인덱스의 크기가 너무 크다면 쿼리 수행 속도가 느려지게.. 2022. 4. 12.
장애 처리 1. 서버 과부하 실제 사용자의 수가 늘었거나 사용자의 행동 패턴이 바뀌었을 때 MySQL 서버의 부하가 높아질 수 있다. 사용자의 행동 패턴이 바뀌는 것은 주로 애플리케이션의 업그레이드나 기능 개선으로 발생할 때가 많은데, 이는 쿼리나 실행 빈도를 적절히 튜닝한 후 애플리케이션을 배포하거나 릴리즈해서 충분히 예방할 수 있다. 사용자의 수가 늘어나는 부분에 대비해서 MySQL 서버가 평상시에는 대략 2~30%의 자원만 사용하도록 유지하기도 한다. 하지만 너무 과다하게 서버를 투입하는 것은 비용적인 문제도 있으므로 사용자 수가 급작스럽게 증가할 때를 대비해 확장 가능한 구성으로 준비해 두는 편이 좋다. 1-1. 운영체제의 유틸리티를 이용해 장비의 부하 확인 유닉스 계열의 운영체제에서는 uptime 명령으로.. 2022. 4. 11.
MySQL 아키텍처 1. MySQL 전체 구조 1-1. MySQL 엔진 a. 커넥션 핸들러 : 클라이언트로부터의 접속 및 쿼리 요청 처리 b. SQL 파서 및 전처리기 c. SQL 옵티마이저 : 쿼리의 최적화된 실행에 도움 d. 성능 향상을 위한 MyISAM의 키 캐시나 InnoDB 같은 보조 저장소 기능 1-2. 스토리지 엔진 실제 데이터를 디스크에 저장하거나 디스크로부터 데이터를 읽어오는 부분 1-3. 핸들러 요청 MySQL 엔진 → 스토리지 엔진에 보내는 요청 1-4. 핸들러 API 핸들러 요청에서 사용되는 API, ‘SHOW GLOBAL STATUS LIKE 'Handler%’로 확인 가능 2. 스레드 구조 MySQL 서버는 Thread 기반으로 작동 2-1. Foreground Thread 캐시 된 Foregrou.. 2022. 4. 10.
공유트랜잭션과 잠금 1. 트랜잭션이란? 작업의 완전성을 보장해주는 것 논리적인 작업 모음을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능 MEMORY 스토리지 엔진 혹은 MyISAM 스토리지 엔진은 트랜잭션 기능이 없다. 트랜잭션은 DBMS의 커넥션과 동일하게 꼭 필요한 최소한의 코드에만 적용하는 것이 좋다. 프로그램의 코드가 DB connection을 가지고 있는 범위와 트랜잭션이 활성화되어 있는 프로그램의 범위를 최소화해야 한다는 것이다. 프로그램의 코드에서 라인 수는 한두 줄이라 하더라도 네트워크 작업이 있는 경우는 반드시 트랜잭션에서 배제해야 한다. 이런 실수로 인해 DBMS 서버가 높은 부하 상태로 빠지거나 위험한 상태에 빠지는 경.. 2022. 4. 9.
728x90