728x90 개발26 장애 처리 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. 인덱스(INDEX) 1. 인덱스란? DBMS에서 인덱스는 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능이다. 인덱스를 역할별로 구분하면 PK와 Secondary Key로 구분해볼 수 있다. PK : 레코드를 대표하는 컬럼의 값으로 만들어진 인덱스 Secondary Index : PK를 제외한 나머지 모든 인덱스 데이터의 중복 허용 여부로 구분하면 유니크 인덱스와 유니크하지 않은 인덱스로 구분할 수 있다. 유니크 여부는 실제 DBMS 쿼리를 실행해야 하는 옵티마이저에게는 상당히 중요한 문제이다. 유니크 인덱스에 대해 동등 조건으로 검색한다는 것은 항상 1건의 레코드만 찾으면 더 찾지 않아도 된다는 것을 옵티마이저에게 알려주기 때문이다. 2. 인덱스의 장점과 단점 장점 테이블을 조회하는 속도와 그에 .. 2022. 4. 8. 이전 1 ··· 3 4 5 6 7 다음 728x90