친구의 개발에서 특히 MySQL 연락처 친구 발생 하 고 때로는 MySQL 쿼리는 매우 느린, 물론, 데이터 수백만 수준, 아니 수십의 큰 금액을 참조, 다음 우리가 봐 쿼리 해결 방법 느린.
-
-
그것은 종종 개발자 인덱싱되지 않은 문이나 제한 조회 발견 N이 아무 계산, 검색 기록의 수백만의 수만의 큰 테이블 같은 데이터베이스에 상당한 영향을 미칠 것 이다 또는 filesort, 데이터베이스 및 서버 IO 영향에 의해 발생 하 고 중단 하지 마십시오. 이것은 미러 도서관 위의 경우입니다.
그리고 인덱스 문도 문의 사용 뿐만 아니라 상황, MySQL 연결 수의 부재 뿐만 아니라 온라인 라이브러리에 너무 많은 문제. 말하자면, 우리의 이전 모니터링 관행을 봐 보자.
1. Zabbix의 배포 및 다른 오픈 소스 분산 모니터링 시스템에 대 한 액세스 일일 데이터베이스 IO, CPU, 연결 수
2. 배포 주간 실적 통계, 데이터를 포함 하 여 증가, iostat, vmstat, datasize
3. Mysql Slowlog 컬렉션, 상위 10 목록
이제 MySQL 노드 프로세스 모니터링, 단점을 많이 찾을 수 배포 이전 모니터링 이러한 일을 생각 하는 것은 아주 완벽 하 게,
첫 번째 접근 방법의 단점: Zabbix 너무 큰 고 하지 MySQL의 내부 컨트롤에 데이터의 많은 매우 준비, 지금 일반적으로 사용 기록 데이터를 검사 하는
두 번째 접근 방법의 단점: 일주일에 한 번만 실행할 수 있기 때문에 많은 것 및 찾을 수 알람
세 번째 방법의 단점은: 노드는 slowlog 아주 많이, top10 의미, 되 고 자주 실행 해야 하는 일반 작업 문을 제공. 참조는 작은 가치
그래서 어떻게 우리가 해결 하 고 이러한 문제 쿼리?
문제 해결에 대 한 성능 병목 현상을 찾는 가장 쉽게 확인 하 고 해결 문제는 MySQL 느린 쿼리 및 인덱싱 없이 쿼리.
좋아, MySQL에서 "쿨" 하지 않은 SQL 문을 찾기 시작 합니다.
=========================================================
방법 1:이 방법은 내가 사용 하 고, hehe, 즉석 섹스의이 종류에 가깝다.
코드는 다음과 같습니다.
Mysql5.0 버전 보다 더 느린 수행 SQL 문의 로깅을 지원할 수 있습니다.
Mysql > '긴 %';와 같은 변수를 표시 참고:이 long_query_time 초 보다는 "느린 질문"를 정의 하는 데 사용 됩니다.
+-----------------+-----------+
| variable_name | 값 |
+-----------------+-----------+
| Long_query_time | 10.000000 |
+-----------------+-----------+
설정 (0.00 초)에 1 행
Mysql > long_query_time 설정 = 1; 참고: 나는 1을 설정, 즉, 이상의 1 초의 실행 시간이 느린 쿼리.
쿼리 확인, 0 행 영향 (0.00 초)
Mysql > '느린 %';와 같은 변수를 표시
+---------------------+---------------+
| variable_name | 값 |
+---------------------+---------------+
| Slow_launch_time | 2 |
| Slow_query_log | 에 | 참고: 로그 로깅 설정 되어
| Slow_query_log_file | /tmp/slow.log | 참고: 위치 설정
+---------------------+---------------+
설정 (0.00 초) 3 행
mysql > 글로벌 slow_query_log 설정 '에' 참고 =: 로깅 오픈
일단 변수가에, mysql로 설정 된 Slow_query_log 레코드 즉시 시작 합니다.
내부 /ETC/MY.CNF 위의 MySQL 전역 변수의 초기 값을 설정할 수 있습니다.
Long_query_time = 1
Slow_query_log_file=/tmp/slow.log
====================================================
방법 2: Mysqldumpslow 명령
코드는 다음과 같습니다.
/path/mysqldumpslow-s c t 10/tmp/느린-로그
이 레코드의 가장 높은 번호 10 SQL 문 출력:
-S는 C, T, L, R 수 기록, 시간, 쿼리 시간, AC에서 알, 아칸소, 해당 플래쉬 백; 반환 하는 레코드의 수에 따라 정렬 하는 방법을 지정 하는 것입니다.
-T는 상위 n 개, 막대;의 이전 수를 반환 하는 데이터의 의미
-G, 소문자; 일반 일치 모드 쓸 수 있습니다.
예를 들면
/path/mysqldumpslow-s r t 10/tmp/느린-로그
가장 레코드 집합을 반환 하는 10 쿼리를 가져옵니다.
/path/mysqldumpslow-s t-t 10 g "왼쪽된 조인" / tmp/느린-로그
왼쪽 연결 쿼리 문을 포함 하는 시간 순서 대로 처음 10 항목을 얻을.
마지막으로, 노드 모니터링 혜택 요약
1입니다. 모니터링, 경량 진짜 시간, 및 사용자 지정 및 수정할 수 실제 상황에
2입니다. 필터는 해당 문을 실행 해야 하는 설정
3입니다. 되지 않은 인덱스 또는 불법, 비록 그것이 그 느린 문을 처리 시간이 그의 적시 발견, 매달려 데이터베이스를 피하기 위해 보람 있다.
4. 데이터베이스, 프로그램 프로세스는 자동으로 저장 됩니다, 이유 조회에 대 한 현재 데이터베이스의 dba에 너무 많은 연결이 있는 경우 그것은 날카로운 무기.
5. Mysqlbinlog를 사용 하 여 분석을 하는 경우 비정상적인 데이터베이스 상태에 대 한 명확한 기간을 얻을 수 있습니다.
어떤 사람들 우리가 MySQL 프로필 설정을 구축할 것입니다.
몇 가지 다른 매개 변수는 tmp_table_size을 조정할 때 발견 되
쿼리 캐시에 등록 된 Qcache_queries_in_cache 수
쿼리 캐시에 추가 된 Qcache_inserts 수
Qcache_hits 캐시 샘플 수
Qcache_lowmem_prunes 메모리의 부족으로 인해 캐시에서 제거 하는 쿼리 수
캐시 되지 않은 쿼리 qcache_not_cached 수 (캐시, 또는 query_cache_type 수 없습니다)
Qcache_free_memory 쿼리 캐시에 대 한 총 메모리
Qcache_free_blocks 쿼리 캐시에서 블록의 사용 가능한 메모리 수
Qcache_total_blocks 쿼리 캐시에서 블록의 총 수
Qcache_free_memory는 일반적으로 사용 되는 SQL 메모리에 로드 하는 경우 일반적으로 사용 되는 쿼리의 일부 캐시할 수 있습니다. 그 데이터베이스 액세스 속도 증가할 것 이다.