FLUSH TABLES WITH READ LOCK 얼마나 빠 른 지 (회전)

5677 단어 mysql
다음으로 이동:http://www.cnblogs.com/sunss/archive/2012/02/02/2335960.html
    최근 에 MySQL 한 대가 라 이브 러 리 에서 지연 되 었 습 니 다. 관찰 한 결과: FLUSH TABLES WITH READ LOCK 은 4 시간 넘 게 막 혔 고 또 다른 SQL 문장 select 도 있 습 니 다. 현상 적 으로 는 select 가 flush tables with read lock 을 막 았 습 니 다.
* 8195: 8195: flush tables with read lock, 모든 열 린 시 계 를 닫 는 동시에 모든 데이터베이스 에 있 는 시 계 를 읽 기 자 물 쇠 를 추가 합 니 다. unlock tables 를 표시 할 때 까지 이 작업 은 데이터 백업 에 자주 사 용 됩 니 다.즉, 모든 더러 운 페이지 를 디스크 에 새로 고치 고 모든 시계 에 읽 기 자 물 쇠 를 추가 하 는 것 이다. 그래서 이 럴 때 데이터 파일 을 직접 복사 하 는 것 이 안전 하 다.하지만 flush tables with read lock 명령 을 내 릴 때 다른 작업 이 있 습 니 다. 시간 이 많이 걸 리 는 작업 입 니까?먼저 쓰기 동작 을 말하자면, 이 FTWRL 은 틀림없이 기 다 려 야 하 며, 쓰기 동작 이 완성 되 어야 FTWRL 을 실행 할 수 있다 는 것 은 이해 하기 쉽다.그럼 다른 읽 기 동작 은 요?예 를 들 어 FLWRL 이 보 내기 전에 query: select count () from tb 가 있 으 면 FTWRL 도 기 다 려 야 합 니 다 (show processlist 에서 waiting for table flush 를 볼 수 있 습 니 다).my sql 에서 읽 고 읽 는 것 은 배척 하지 않 는 다 고 말 할 수 있 습 니 다. 왜 기 다 려 야 합 니까?FTWRL 은 flush 더러 운 페이지 를 원 하기 때문에 그래 야 데이터 의 일치 성 을 확보 할 수 있 습 니 다 (예 를 들 어 xtrabackup 에서 my isam 표를 백업 할 때). select count () from tb 가 실 행 될 때 모든 작업 이 메모리 에서 작 동 되 기 때문에 이 때 는 완전히 flush 가 되 지 않 기 때문에 FTWRL 은 기 다 려 야 합 니 다.혹시 라 도 select 페이지 는 더러 운 페이지 가 아 닌 데 왜 FTWRL 이 기 다 려 야 하 는 지 의문 이 있 을 수 있 습 니 다.my sql 좀 더 완벽 하 게 하면 안 돼 요?나 는 my sql 이 이렇게 간단 하지 않 을 것 이 라 고 생각 합 니 다. 기다 리 는 이 유 는 이 시계 가 매우 커서 모든 페이지 를 한꺼번에 메모리 에 읽 을 수 없 기 때 문 입 니 다. query 는 원자 성 을 가지 고 있 기 때문에 일반적으로 막 힐 수 없 기 때 문 입 니 다. 그 러 니 순 순 히 실행 시 켜 야 합 니 다. 그래서 FTWRL 은 기 다 려 야 합 니 다.
『 8195 』 flush tables with read lock 은 테스트 할 때 몇 밀리초 만 에 완성 할 수 있 습 니 다. 제 가 만난 상황 처럼 생산 환경 에서 도 몇 시간 이 걸 릴 수 있 습 니 다.그 동안 MySQL 서 비 스 는 read - only 뿐만 아니 라 완전히 차단 되 었 습 니 다.flush tables with read lock 이 동작 을 하기 때 문 입 니 다.
요청 잠 금
flush tables with read lock 전역 read lock 요청.이런 상황 이 발생 하면 다른 프로 세 스 가 수정 동작 이 있 으 면 막 힐 것 이다.이론 적 으로 볼 때 이런 상황 은 결코 나 쁘 지 않다. 왜냐하면 flush tables with read lock 은 read lock 만 필요 하고 다른 명령 (read lock 만 필요 함) 은 flush tables with read lock 과 병존 할 수 있 기 때문이다.그러나 사실상 대부분의 수 표 는 자 물 쇠 를 읽 고 써 야 한다.예 를 들 어 첫 번 째 문 구 는 이 전체적인 읽 기 자물쇠 에 의 해 막 히 고 하위 조 회 는 첫 번 째 문장 에 의 해 막 히 기 때문에 진정 으로 효과 적 인 것 은 열 쇠 를 사용 하 는 것 이다. 모든 새로운 요청 이 막 히 고 조회 문 구 를 읽 는 것 을 포함한다.
대기 자물쇠
flush tables with read lock 이 잠 금 을 성공 적 으로 얻 기 전에 모든 구문 이 실 행 될 때 까지 기 다 려 야 합 니 다 (SELECT 포함).따라서 느 린 조회 가 실행 되 거나 열 린 업무 가 있 거나 다른 프로 세 스 가 시계 자 물 쇠 를 들 고 있 으 면 flush tables with read lock 은 모든 자물쇠 가 풀 릴 때 까지 막 힙 니 다.아래 의 예 를 보십시오.
mysql> show processlist;
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
| Id | User | Host      | db   | Command    | Time | State             | Info                                                                 |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
|  4 | root | localhost | test | Query      |   80 | Sending data      | select count(*) from t t1 join t t2 join t t3 join t t4 where t1.b=0 |
|  5 | root | localhost | test | Query      |   62 | Flushing tables   | flush tables with read lock                                          |
|  6 | root | localhost | test | Field List |   35 | Waiting for table |                                                                      |
|  7 | root | localhost | test | Query      |    0 | NULL              | show processlist                                                     |
+----+------+-----------+------+------------+------+-------------------+----------------------------------------------------------------------+
4 rows in set (0.00 sec)

스 레 드 6 이 연결 되 지 않 은 것 을 볼 수 있 습 니 다. MySQL 의 클 라 이언 트 가 연결 되 었 을 때 - A 를 지정 하지 않 았 기 때문에 현재 라 이브 러 리 에 있 는 모든 표 와 열 을 가 져 오 려 고 합 니 다.스 레 드 5 도 flush tables 가 없습니다. 스 레 드 4 에서 자 물 쇠 를 풀 기 를 기다 리 고 있 기 때 문 입 니 다.
새로 고침 표
flush tables with read lock 이 자 물 쇠 를 가 져 오 면 반드시 flush data.MyISAM 엔진 에 대해 서 는 자신의 data 뿐만 아니 라 운영 체제 의 data 도 disk 에 새로 고 칩 니 다 (MyISAM relies on the filesystem block cache for caching reads to the data rows and indexes, while InnoDB does this within the engine itself, combining the row caches with the index caches).그래서 MyISAM 시계 라면 시간 이 오래 걸 릴 수도 있 습 니 다.
소지 자물쇠
잠 금 을 풀 려 면 unlock tables 나 다른 명령 을 사용 할 수 있 습 니 다.
결론.
하나의 백업 시스템 은 일반적으로 생산 환경 에서 사용 되 기 때문에 우 리 는 flush tables with read lock 이 곧 실 행 될 것 이 라 고 간단하게 생각 할 수 없다.어떤 경우 에는 집행 이 느 린 것 은 피 할 수 없다.그러나 이러한 global lock 을 피하 기 위해 백업 시스템 을 설정 할 수 있 습 니 다.
mysqlperformanceblog

좋은 웹페이지 즐겨찾기