연구 노트 - "고성능의 MySQL"

데이터베이스 관련 지식이 "를 달성하기 위해 데이터베이스 시스템", "고성능의 MySQL"과를 참조하십시오. 포괄적 인 두 권의 책이 더 잘. "고성능 MySQL은"보기, 원칙의 관점에서 "달성하기 위해 데이터베이스 시스템"의 관점에서 시작합니다. 보류, 결과는 읽을 수 없습니다 : 관련 지식 학습 강박 관념의 데이터베이스를 가지고 사용하는 경우, 우리는 그것을 구현하는 방법을 이해해야합니다, 직접 "이노 디비 스토리지 엔진 MySQL의 커널을"샀다.

지식 데이터베이스는, 개인적으로 다음과 같은 순서가 합리적이라고 생각합니다.

하드 디스크

두 번째 장에서 "달성하기 위해 데이터베이스 시스템은"혼자 장 디스크 스토리지의 원리를 설명. 컴퓨터 하드웨어에 하드 전용 디스크, 소프트웨어 굴복의 영구 저장 용량의 내장 된 구성 요소를 가지고 있기 때문이다. 따라서 순서대로 디스크 스토리지의 특성을 이해하는 것은 설계 소프트웨어의 뒤에 논리를 이해합니다. 디스크 스토리지는 다음과 같은 특징이 있습니다 :

  1. 특성 A : CPU 지연 비교는, 디스크 대기 시간이 매우 크다. 1 ~ 10ms의 기계적 하드 드라이브를 하나 개의 I / O 지연, 3.3GHz의 CPU를 들어, 일 비교에서 "최고 성능"에있다, 지시주기는 0.3ns이다. 사이의 차이는 CPU 명령어주기가 1 초, I / O를 지연 한 12 개월 후 기계적인 하드 디스크의 경우 얼마나. 꽃이 감사까지 정말 기다립니다.

  2. 특징 B : 디스크 블록 장치는, 각 블록에 의해 기록된다. 일반적으로 블록 512byte. 하드 드라이브를 사용하는 것을주의해야한다 不能用轮船只运输一个土豆到美国.

  3. 특성 C : 랜덤 IO 성능의 IO 성능의 순서보다 훨씬 높은. IO의 순서는 피할 수 있기 때문에 시간과 회전 지연 시간을 추구합니다.

상기의 기능은, 예를 들어, 데이터베이스의 디자인뿐만 아니라 운영 시스템 설계에 지대한 영향을 영향을뿐만 아니라,page cache

읽기 및 쓰기

데이터베이스의 동작은 기본적으로 고차원의 능력이다 : 우리가 가장 자주 작동을 사용하여 데이터베이스를 업데이트 / 선택하고 삭제합니다. 따라서 데이터베이스가 핵심 문제를 해결 고성능 읽기 및 쓰기 달성하기 위해 데이터를 구성하는 방법입니다.

### 트랜잭션
고성능 동시 읽기를 무시하고 동시 시나리오 쓸 수없는, 데이터 일관성 문제가있을 것입니다. 그래서 事务데이터 일관성의 문제를 해결하는 데 사용됩니다.

기본 각 SQL 문은 트랜잭션이, 당신은 수동으로이 규칙 시점 변화를 저지 설정할 수 있습니다

MySQL의에서, 트랜잭션 격리 수준은 네 가지가 있습니다. 네 사실이 아닌 기계적, 응용 프로그램 시나리오에서 파생 될 수 없습니다.

확약 읽기

수정 된 기록 일 A는하지 제출, 트랜잭션 B는 테이블, 읽기 트랜잭션을 읽습니다. 이다 未提交读. 우리의 자신의 디자인 데이터베이스의 경우, 제어하는 다른 방법이없는 경우, 그것은 동시성에서 일어날 것입니다, 원본 데이터의 필드를 수정합니다. 더티 데이터를 판독하기 때문에, 또한, 더티 판독이라고.这里我们也可以将事务换一个熟悉的概念:线程来理解

커밋 된 읽기

위의 내용은 未提交读변경 범위의 내정에 저장하면 문제 때문에 커밋되지 않은 데이터는 다른 트랜잭션에 영향을주지 않습니다. 이 격리 수준은 읽기 최선을 다하고 있습니다. 또한 비 반복 읽기라고도합니다. 두 번 실수의 구현 때문에 서로 다른 결과를 얻을 수 있습니다 내부.

반복 읽기

에 직면 읽어 제출 비 반복 읽기의 질문에 可重复读격리 수준에 따라 피했다. 그것은 반복적으로 거래를 보장 같은 레코드가 변경되지 않습니다 읽을 수 있습니다. 물론, 경우 내부 업무 기록의 변화, 다른 하나는 말했다. 이 문제는 다른 레벨 [팬텀 판독]에 의해 발생된다. 이 잘 이해된다 : 두 개의 트랜잭션을. 인 읽기 트랜잭션이 존재하지 않는 기록을 작성, B의 거래 기록이 기록됩니다. 거래 쓰기 오류의 가능한 경우가 발생합니다.

직렬화

트랜잭션 실행 순서. 최소 성능 연습.

색인

쿼리 데이터는 일반적으로 두 가지 일반적인 시나리오를 가지고 等值查询区间查询. select * from table where field=a또는 select * from table where field between a and b. 인덱스없이, 유일한 방법은 전체 테이블 스캔입니다. 그것은 건초 더미 접근 방식에서 바늘입니다. 어떻게 최적화 문제 : 프로그래머는 일반적으로 두 가지 점에 초점을 맞 춥니 다. 에 해당하는 쿼리의 경우, 가장 좋은 방법은 해시를 최적화 할 수 있습니다. 정렬 : 그것은 숨겨진 논리를 가지고 있기 때문에 범위 쿼리의 경우,하지 해시 알고리즘에 온다. 정렬 된 어레이, 링크드리스트 : 통상적으로, 데이터 구조를 정렬하는 기능을 구비한다. 테이블을 이동합니다. AVL 나무, 레드 - 블랙 트리, B 트리, B + 트리.

왜 B의 + 트리?

  1. 하드 블록 장치. A B + 트리를 사용하여 세 개의 층을 초과하지 않는 B 트리의 레벨을 제어하는, 상기 N 개의 요소에 동일한 블록에 수용 될 수있다. IO의 수를 감소.
  2. B +는 노드 목록을 잎입니다. 주문 디스크 IO 작업을 용이하게한다.

공연

성능 응답 시간입니다. 아이디어는 성능 문제를 하향식 (top-down) 방식으로 문제를 해결하는 것입니다 :

  1. CPU는, 메모리, 네트워크, IO는, 하드 디스크는 OK입니까?
  2. 아니 OK에만 삼가지 경우 : 충분한 마진 또는 구성 불합리한 또는 순서가.
  3. 인덱스 최적화, 테이블의 구조를 최적화, 쿼리가 손에 머리를 최적화.

성능 문제는 운영 체제에 관한 더 많은 지식이 필요합니다.

복사

이것은 MySQL의 살인자입니다. 복제하지 않고, MySQL은 인기가 될 수 없습니다. 복사 기능에서 일어나 :,로드 밸런싱, 고 가용성, 장애 복구, 백업을 별도의 읽기 및 쓰기 테스트를 업그레이드합니다. 메인 스트리트는 학대의 개념이다.

방법의 복사 : 기반 로그 및 행 기반 복제를 복사합니다.

확장 성

확장 성 자원 용량을 증가시켜 시스템 용량을 개선하는 것입니다. 이러한 분리하여 MySQL을로 읽기 및 쓰기, 노예 각 노드를 추가, 데이터베이스 동시성 수준의 읽기 능력이 향상되었습니다. 물론, 시스템 계층 있기 때문에, 각 레벨은 전체 시스템의 확장 성 확장 성을 위해 자격 지원합니다.

데이터베이스 수준의 공통 전략은 이러한 전략의 하위 라이브러리 서브 테이블을 확장하는 것입니다.

또한, 시스템의 성능과 확장 성이 다른 두 가지입니다. 하이브 예를 들어, 낮은 성능,하지만 그것의 확장에 영향을주지 않습니다.

고 가용성

가용성은 본질적으로 가동 중단 시간입니다. 만약 컴퓨터, 50 %의 사람, 1 일 8 시간 근무, 사람들의 33 % 가용성의 일반적인 가용성의 관점에서 다른 사람.

고 가용성 하향식, 두 가지 방법을 사용하는 아이디어는 : 提升平均失效时间间隔짧은에, 가능한 한 두 시간 간격의 중간에 시스템을 만드는 것입니다, 降低平均恢复时间짧은에, 복구하는 시간이있다 더 짧은. 따라서, 더 고 가용성 아키텍처는 MySQL과의 상호 백업,로드 밸런싱과 같은 것들의 수준이다.

백업

백업은 쉽게 항목을 간과한다. 일반적으로 그 중요한 순간 ​​중 하나가 내 휴대 할 필요가보고 기다립니다. 세 가지 기본 백업 역할이 있습니다 재해 복구, 감사, 테스트.

"고성능 MySQL은"책은 깊이와 폭 균형의, 순전히 독서의 개발을위한 세부 사항의 원칙이다. 좀 더 깊이있는 연구를 원하는 경우, 추정 "데이터베이스 시스템 구현은"더 적절한 책이다.

추천

출처blog.51cto.com/sbp810050504/2428524