[] MySQL 데이터베이스 시스템, 엔진, 잠금 장치

A, MySQL의 논리적 아키텍처

(1) 전체 층화

  • 연결 층
    • 클라이언트와 서비스 연결을 설정합니다
    • 일부 연결 처리, 인증 및 권한 부여와 관련된 보안 솔루션을 완료
    • 이 레이어에 연결 풀의 개념을 도입
  • 서비스 레이어
    • 핵심 서비스를 제공
    • 복사 SQL 인터페이스, 완벽한 캐시 된 쿼리, 분석 및 SQL의 최적화 부분과 기능 내장을 수행
    • 모든 걸쳐 스토리지 엔진의 기능이 계층에서 실현된다
    • 해결 쿼리 및 해당 분석 전력 및 전체 최적화를 만들 적절한 조치를 생성
    • 내부 캐시의 합리적인 할당, 최적화 문제는 읽기 작업의 큰 숫자를 해결하기 위해
  • 엔진 층
    • 스토리지 엔진 API를 통해 정말 스토리지에 대한 책임 및 데이터의 검색 MYSQL은 의사 소통
    • 다른 다른 스토리지 엔진 기능
  • 저장 층
    • 쌍방향 엔진에 완료 컴퓨터 파일 시스템에 저장된 주요 운영 데이터 파일,

도 2도 1의 논리 구조.

그림 삽입 설명 여기

3, 논리적 인 계층 구조

그림 삽입 설명 여기

4 개 혜택, 계층 적 논리

  • 문제가 발견하는 기능 1. 명확 유통,
  • 2. 플러그 - 인 스토리지 엔진은 쿼리 처리 시스템 작업 및 다른 작업은 추출물 상 데이터로부터 분리 된
  • 3. 필요한 요구 및 비즈니스 서비스로 올바른 스토리지 엔진을 선택할 수 있습니다

둘째, 스토리지 엔진

1 개념 스토리지 엔진

  • 에서 파일 (또는 메모리)에 저장된 다양한 기술의 다양한 MySQL의 데이터입니다.
  • 이러한 기술을 기술들 각각은 다른 저장 장치, 인덱싱 기법 로크 레벨을 사용하고, 궁극적으로 다른 기능 및 다양한 기능을 제공한다.
  • 서로 다른 기술을 선택하면하여 응용 프로그램의 전반적인 기능을 개선, 여분의 속도 또는 기능을 얻을 수 있습니다.
  • 이러한 다양한 기술 및 지원 관련 기능은 MySQL의 스토리지 엔진에 불렸다

사용하는 현재 엔진을보기

show engines;       #查看当前版本中默认支持的数据库引擎

show variables like '%storage_engine';     #查看当前数据库使用的引擎
  1. 이노

    선호 트랜잭션 데이터베이스 엔진, 안전한 트랜잭션 테이블 (ACID), 지원 행 잠금 및 외래 키에 대한 지원, InnoDB는 기본 MySQL의 엔진입니다.

    InnoDB의 주요 기능은 다음과 같습니다

    1. InnoDB는 MySQL에 제공하는 커밋과 롤백, 거래 안전 스토리지 엔진의 응급 복구 기능을 제공합니다.
    2. 이노는 최대의 성능을 발휘하도록 설계 엄청난 양의 데이터를 처리 할 수 ​​있도록 설계되어있다. 그 CPU 효율은 다른 디스크 기반 관계형 데이터베이스 엔진보다 높다.
    3. 이노 스토리지 엔진 자체 버퍼 풀, 및 상기 인덱스 데이터를 메모리에 캐시 될 수있다.
    4. InnoDB는 외래 키 무결성 제약 조건을 지원합니다.
    5. InnoDB의 높은 성능을 요구하는 다수의 대규모 데이터베이스 사이트에 사용된다
    6. InnoDB는 행 수준 잠금을 지원
  2. 의 MyISAM

    ISAM의의 MyISAM 스토리지 엔진, 그것의 확장을 기준으로합니다. 그것은 웹, 데이터웨어 하우징 및 기타 애플리케이션 환경에서 가장 일반적으로 사용되는 스토리지 엔진 중 하나입니다. 의 MyISAM은 높은 삽입, 쿼리 속도를 가지고 있지만, 일을 지원하지 않습니다.

    의 MyISAM의 주요 기능은 다음과 같습니다

    1. 대형 파일 지원 더 나은
    2. 삭제하는 경우, 갱신, 삽입, 혼합 덜 파편을 생산하고 있습니다.
    3. 각 MyISAM 테이블 인덱스를 컴파일하여 변경 될 수있다 (64)의 최대 수이다. 인덱스 당 최대 열 번호 16
    4. 최대 키 길이는 1000 바이트입니다.
    5. BLOB 및 TEXT 컬럼은 인덱스 할 수있다
    6. NULL 각 키 값 0 또는 1 바이트를 나타내는 인덱스 열에 허용
    7. 모든 숫자 키 값은 제 1 압축 높은 인덱스를 허용하는 상위 바이트에 저장된
    8. 빠른 InnoDB의 유형 AUTO_INCREMENT보다는 AUTO_INCREMENT의 MyISAM 타입의 테이블 열 업데이트
    9. 당신은 다른 디렉토리에 데이터 파일과 인덱스 파일을 넣을 수 있습니다
    10. 각 문자 열은 다른 문자 집합을 가질 수 있습니다
    11. 이 VARCHAR 테이블의 길이는 고정 또는 동적 기록 할 수있다
    12. VARCHAR와 CHAR 열은 64킬로바이트까지 될 수 있습니다
    13. 만 테이블 잠금을 지원합니다
    14. 지원 FULLTEXT KEY (전체 텍스트 인덱스)
  3. 기억

    다른 테이블에 데이터 쿼리 및 참조에 대한 빠른 액세스를 제공하는 메모리에 테이블에 데이터를 저장에 MEMORY 스토리지 엔진.

  4. 블랙홀

    엔진 등의 블랙홀 전체 중간 컴퓨터 아키텍처의 마스터를 사용하여 마스터의 압력을 해제하는 데 일반적으로 가상 호스트 인

    단지 로그 데이터를 생산하는 저장되지 않습니다.

선택 2, 스토리지 엔진

일반적으로, 삽입과 동시에 높은 성능 요구 사항, 또는 외래 키가 필요하거나 필요한 트랜잭션 지원은 이노을 선택하는 데 필요한이고,

적은 쿼리 많은 장면 우선 순위의 MyISAM를 삽입합니다.

(3) 지정된 엔진

일반 테이블의 건설 중에 추가

create table abc (
    name char(10)
) engine=MyISAM charset=utf8;

create table xyz (
    name char(10)
) engine=InnoDB charset=utf8;

파일의 측면에서 4, 이노와의 MyISAM은 차이

  1. InnoDB는 두 문서 테이블로 저장됩니다

    • 구조 인덱스> 스토리지 테이블 - demo.frm
    • demo.ibd -> 데이터를 저장, IBD 스토리지가 한정되어, 불충분 저장 자동 ibd1 생성 ibd2
  2. MyISAM 테이블은 파일로 저장됩니다 세

    • 구조> 스토리지 테이블 - demo.frm
    • demo.myd -> 데이터 저장
    • 색인> 스토리지 테이블 - demo.myi

그림 삽입 설명 여기

셋째, 잠금 장치

컴퓨터 잠금 장치는 여러 프로세스 또는 스레드 자원에 대한 동시 액세스를 조정합니다.

동시 액세스 잠금 장치는 데이터 일관성과 효율성을 보장하기 위해;

잠금 충돌이 데이터베이스에 동시 액세스의 성능에 영향을 미치는 중요한 요소이다.

MySQL의 잠금 동시 서버 저장 층 및 제어 계층 엔진이다.

명사 분류

  • 행 수준 잠금

    • 잠금 MySQL을 세부적 잠금 만 현재 동작 라인 표현 잠금 잠금 로우 레벨이다.
    • 이노 엔진 지원을 잠금 만 행 수준.
    • 행 수준 잠금 충돌이 크게 데이터베이스 작업을 줄일 수 있습니다. 그 잠금의 최소 크기,하지만 큰 오버 헤드 잠금.
    • 특징 : 느린 잠금 큰 오버 헤드; 교착 상태가 될 것이다 잠금 단위 잠금 충돌의 가장 작고 가장 낮은 확률, 동시성의 높은 학위를 가지고있다.
  • 테이블 수준 잠금

    • MySQL의 테이블 수준 잠금 잠금의 가장 큰 크기에 잠겨
    • 현재 작업의 전체 테이블을 잠 그려면, 그것은 MySQL의 엔진의 대부분을 지원하는 간단한, 낮은 자원 소비입니다.
    • 특징 : 작은 오버 헤드, 빠른 잠금, 교착하지, 큰 크기를 잠금, 잠금 충돌의 가능성은 동시성의 최고 및 최저 수준의 발행.
  • 페이지 잠금

    • 오버 헤드 표와 행 잠금과 잠금 속도, 교착 상태가 발생 표와 행 잠금 잠금 일반적 동시성 사이 입경
    • 페이지 잠금 BDB InnoDB에 의해 대체 된 이후, 우리는 단지 BDB 엔진에 문제 이노 MyISAM 테이블 잠금 및 행 잠금을 논의
  • 공유 잠금 (읽기 잠금)

    • 다른 사용자가 동시에 데이터를 읽을 수 있지만, 모든 공유 잠금이 해제 될 때까지 더 트랜잭션이 데이터를 수정할 수 없습니다.
  • 독점 잠금 (쓰기 잠금)

    • 플러스 단독 잠금을 트랜잭션 데이터 T는, 다른 트랜잭션이 할 수없는 경우 플러스 봉쇄의 모든 유형.
    • 그는 배타적 잠금 트랜잭션 데이터 만 읽을뿐만 아니라, 데이터를 수정하지를 보유하고 있습니다.
  • 낙관적 잠금 (낙관적 잠금)

    즉 동시성 위반이 발생하지 않습니다 가정하면이 작업을 커밋에만 데이터 무결성 검사의 위반입니다. 낙관적 잠금 더러운 읽기의 문제가 해결되지 않습니다.

    낙관적 잠금, 정의에 의해, 매우 낙관적이다, 그것은 고정되지 않도록, 데이터를 다른 사람이 수정되지 때마다 데리러하지만 업데이트가이 시간 동안 다른 사람이 데이터를 업데이트하지 않았다 결정 때, 당신은 사용할 수 있습니다 메커니즘의 버전 번호입니다. 응용 프로그램의 유형 읽을 데이터베이스가 실제로 같이 제공되는 유사한 write_condition 낙관적 잠금 메커니즘을 제공하는 경우 처리량을 향상시킬 수 있도록 낙관적 잠금이 적합합니다.

  • 비관적 잠금 (비관적 잠금)

    운영 데이터 무결성의 모든 위반 가능성을 차단, 동시 충돌이 일어날 것입니다 가정합니다.

    비관적 잠금은, 정의에 의해, 때마다 다른 사람이 수정 것이라는 생각을 데이터를 선택, 매우 비관적 인 그녀가 사람들은 잠금을 가지고 때까지 차단이 데이터를 가지고 할 수 있도록 데이터가 잠 깁니다했다 때마다 너무. 전통적인 관계형 데이터베이스 내부는이 잠금 장치를 많이 사용하는, 같은 행 등 잠금, 테이블 잠금, 읽기 잠금, 쓰기 잠금, 첫 번째 작업을 수행하기 전에 잠 깁니다.

그림 삽입 설명 여기

표 잠금 작업

(도에서 이노)의 MyISAM 스토리지 엔진, 작은 오버 헤드에 찬성 편견, 큰 입자 크기, 잠금 충돌, 최악의 동시 지원의 가능성이 가장 높은 잠금, 빠른 교착 상태를 고정하지 않습니다.

특징 : 사람은 테이블을 읽을 수있는, 다른 사람은 줄을.

#查看表中有没有被锁
show open tables;

#加上读写锁
lock table stuinfo read; 
lock table stuinfo write;

#解除锁
unlock tables;

이 잠금 상태를 열 시간이있을 때, 읽기 잠금 (공유 잠금)를 추가

  • 중 현재 단말이 접속되고
    • 당신은 현재 테이블을 조회하는 쿼리를 사용할 수 있지만 다른 작업을 수행 할 수 없습니다
    • 다른 테이블에서 작동 할 수 없습니다
  • 다른 운영 단말기에서
    • 당신이 다른 작업을 사용할 수 있습니다, 현재 쿼리 테이블을 쿼리하는 데 사용 할 수 있지만 잠금의 구현에 차단 한 후 종료됩니다
    • 다른 테이블에서 작동 할 수 없습니다

이 잠금 상태를 열 시간이있을 때, 쓰기 잠금 (단독 잠금)을 추가

  • 경우 현재 단말 링크
    • 당신은 잠겨 조회하고 현재 활성화 된 테이블을 조작 할 수 있습니다
    • 그것은 활성 쿼리 (자동 잠금) 다른 테이블에서 잠글 수 없습니다
  • 다른 운영 단말기에서
    • 당신은 현재 테이블을 조회하는 쿼리를 사용할 수 있지만, 잠금이의 구현에 차단 한 후 종료됩니다
    • 당신은 액션 형 작업의 다른 유형을 사용할 수 있지만 잠금이의 구현에 차단 한 후 종료됩니다

행 잠금

바이어스 이노 스토리지 엔진, 대형 헤드 느린 잠금 교착 상태가 될 것이다 작은 크기, 하단의 로크 충돌 확률 잠금 동시성의 가장 높은 수준을 갖는다.

행 레벨 잠금을 사용하는 우선, 지원 서비스, 및 제 : 이노의 MyISAM과 큰 차이.

특정 신흥 문제에 동시 거래

  • 1. 업데이트 손실 문제

각 트랜잭션은 다른 트랜잭션의 존재를 인식하지 못합니다 손실 업데이트 문제가, 다른 기업이 할 덮고있는 마지막 업데이트를 발생하기 때문에 두 개 이상의 트랜잭션이 행을 업데이트하기 위해 동일한 행을 선택하고 초기 값에 따라 선택 업데이트.

  • 2. 더티 읽기
  • 3. 비 반복 읽기
  • 4. 매직 읽기

보기 격리 수준

  • 다른 트랜잭션이 커밋되지 않은 트랜잭션 데이터를 읽을 수있다 (커밋되지 않은 읽기) 커밋되지 않은 읽기
  • 약속 (약속 읽기, 반복 불가능한 읽기) 읽기 트랜잭션은 트랜잭션이 다른 커밋 한 후 데이터를 읽을 기다릴 필요
  • 반복 읽기 (반복, 높은 효율, 다양한 문제를 방지 할 수 있으며, 기본 수준) 읽기 데이터 (열려있는 트랜잭션)의 시작이며, 더 이상 작업을 수정할 수 없습니다.
  • 직렬화 (직렬화가 매우 효과적이고, 비효율적, 기본 수준 아니다),이 수준에서, 피하기 더러운에 거래 직렬화 순서의 구현 읽기, 비 반복 읽기 및 팬텀 읽기.
select @@global.tx_isolation,@@tx_isolation;

격리 수준 설정

우리는 나중에 mysql5.5 업무에 가까운 자동 테스트 거래시, 기본이 자동 제출을 제출해야

show variables like 'autocommit';    #查看事务的开启状态

set autocommit = 0    #0是关闭,1是开启
#全局设置
set global transaction isolation level Repeatable read; 

#当前会话终端设置
set session transaction isolation level Repeatable read;

그리고 행 잠금 자물쇠의 간격을 사용하여

게시 된 116 개 원래 기사 · 원의 찬양 (10) · 전망 1365

추천

출처blog.csdn.net/weixin_44727383/article/details/104954622