MySQL 느 린 로그 프로필 및 Anemometer 도구 소개

8419 단어 mysql
MySQL 느 린 로그 프로필:
원본 주소:http://www.fordba.com/box-anemometer-visual-mysql-slow.html
MySQL 느 린 로 그 는 많 든 적 든 들 어 보 셨 을 것 입 니 다. 주로 MySQL 에서 장시간 실행 (log query time 단위 초 초과) 을 기록 하 는 동시에 examine 의 줄 수 는 min 을 초과 합 니 다.examined_row_limit, MySQL 성능 에 영향 을 주 는 SQL 문 구 는 DBA 가 최적화 할 수 있 도록 합 니 다.
MySQL 에서 만약 에 하나의 SQL 이 자 물 쇠 를 가 져 오 기 를 오래 기 다 려 야 한다 면 이 자 물 쇠 를 가 져 오 는 시간 은 실행 시간 이 아니 라 SQL 이 실행 되 고 해당 하 는 자 물 쇠 를 풀 어야 느 린 로그 에 기록 할 수 있 기 때문에 MySQL 의 느 린 로그 에 기 록 된 순 서 는 실제 실행 순서 와 다 를 수 있 습 니 다.
기본적으로 MySQL 의 느 린 로그 기록 은 닫 혀 있 습 니 다. slow 를 설정 할 수 있 습 니 다.query_log = 1 로 MySQL 의 느 린 조회 로 그 를 엽 니 다. slowquery_log_file=file_느 린 조회 파일 이름 을 설정 합 니 다. 파일 이름 이 설정 되 어 있 지 않 으 면 기본 이름 은? host_name-slow.log。또한 로그 아웃 = {FILE | TABLE} 을 설정 하여 느 린 로 그 를 파일 에 쓸 지 데이터베이스 에 쓸 지 지정 할 수 있 습 니 다. (로그 아웃 = NONE 를 설정 하면 느 린 로그 기록 을 하지 않 습 니 다. slow query log = 1)
MySQL 의 관리 유지보수 명령 의 느 린 SQL 은 MySQL 느 린 로그 에 기록 되 지 않 습 니 다.일반적인 관리 유지보수 명령 은 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, REPAIR TABLE 을 포함한다.MySQL 의 느 린 로그 가 오랫동안 실 행 된 명령 을 기록 하 기 를 원한 다 면 log 를 설정 할 수 있 습 니 다.slow_admin_statements 는 1 이다.
로그 설정 을 통 해queries_not_using_indexes = 1, MySQL 의 느 린 로그 도 색인 을 사용 하지 않 는 SQL 을 기록 할 수 있 습 니 다.그러나 이 옵션 을 열 때 데이터베이스 에 색인 을 사용 하지 않 은 SQL 이 대량으로 존재 한다 면 MySQL 느 린 로그 의 기 록 량 이 매우 많 기 때문에 인자 log 를 설정 해 야 합 니 다.throttle_queries_not_using_indexes 。기본 적 인 상황 에서 이 매개 변 수 는 0 으로 제한 되 지 않 음 을 표시 합 니 다. 변 경 된 매개 변 수 를 0 이상 의 값 으로 설정 할 때 MySQL 이 1 분 동안 색인 을 사용 하지 않 는 SQL 의 수량 을 기록 하여 느 린 로그 에 너무 많은 SQL 을 기록 하지 않도록 합 니 다.
MySQL 5.7.2 이후 느 린 로 그 를 파일 에 쓰 는 것 으로 설정 하면 log 를 설정 해 야 합 니 다.timestamps 는 느 린 로그 파일 에 기 록 된 시간 대 를 제어 합 니 다. (이 매개 변 수 는 genel 로그 와 err 로그 에 동시에 영향 을 줍 니 다.)느 린 로 그 를 데이터베이스 에 기록 하 는 것 으로 설정 하면 이 매개 변 수 는 작 동 하지 않 습 니 다.
그래서 어떤 SQL 이 MySQL 느 린 로그 에 기 록 될 수 있 는 지 정리 합 니 다.
  • log 를 명확 하 게 설정 하지 않 는 한 MySQL 의 관리 유지 명령 을 기록 하지 않 습 니 다.slow_admin_statements=1;
  • SQL 실행 시간 은 log 를 초과 해 야 합 니 다.query_time, (잠 금 대기 시간 포함 하지 않 음)
  • 매개 변수 logqueries_not_using_indexes 를 1 로 설정 하고 SQL 은 색인 을 사용 하지 않 았 으 며 log 를 초과 하지 않 았 습 니 다.throttle_queries_not_using_indexes 매개 변수 설정.
  • examine 의 줄 수 를 조회 하려 면 min 을 초과 해 야 합 니 다.examined_row_limit

  • 주: 표 에 기록 이 없 거나 1 개의 기록 만 있 으 면 유 틸 리 티 는 색인 이 효율 을 높이 지 못 한다 고 생각 합 니 다. log 를 설정 하 더 라 도.queries_not_using_indexes = 1, 느 린 로그 에 기록 되 지 않 습 니 다.
    주: SQL 이 QC 를 사용 했다 면 느 린 로그 에 기록 되 지 않 았 을 것 입 니 다.
    주: 비밀번호 수정 과 같은 유지보수 작업 은 암호 부분 이 별표 로 대체 되 어 명문 으로 표시 되 지 않도록 합 니 다.
    Anemometer 프로필:
    항목 주소:https://github.com/box/Anemometer
    프레젠테이션 주소:http://lab.fordba.com/anemometer/
    Anemometer 는 MySQL 느 린 로 그 를 그래 픽 으로 표시 하 는 도구 입 니 다.pt - query - digest 와 결합 하면 Anemometer 는 느 린 조회 로 그 를 쉽게 분석 하여 어떤 SQL 이 최적화 되 어야 하 는 지 쉽게 찾 을 수 있 습 니 다.
    Anemometer 라 는 도 구 를 사용 하려 면 다음 과 같은 환경 을 준비 해 야 합 니 다.
  • 분석 데 이 터 를 저장 하 는 MySQL 데이터베이스
  • pt-query-digest.                       (doc: Percona Toolkit )
  • MySQL 데이터베이스 의 느 린 조회 로그 (doc: The Slow Query Log )
  •  PHP 버 전 5.5+  apache 나 nginx 등 웹 서버 가 모두 가능 합 니 다.
  • 설치:
  • Anemometer 다운로드
  •  git clone git://github.com/box/Anemometer.git anemometer

    데이터 불 러 오기:
    먼저 표 구 조 를 만 들 고 global query review 와 global query review history 를 만 듭 니 다. 표 정의 에 0000 - 00 - 00 00: 00 의 날짜 기본 값 이 존재 하기 때문에 sql mode 를 수정 하여 zero date 의 sql mode 를 닫 고 only full group by 를 닫 아야 합 니 다.
    cd /www/lab/anemometer
    mysql < ./install.sql 
    

    현재 pt - query - digest 를 사용 하여 MySQL 의 느 린 조회 로 그 를 캡 처 한 다음 slow query log 데이터베이스 에 데 이 터 를 삽입 해 야 합 니 다.
    다음 방식 으로 데 이 터 를 불 러 옵 니 다. h 는 호스트 이름 이나 ip 주 소 를 표시 합 니 다. D 는 database 를 표시 하고 t 는 표 이름 을 표시 하 며 맨 뒤에 느 린 로그 경 로 를 따라 갑 니 다.
    pt - query - digest 버 전 > 2.2:
     
    $ pt-query-digest --user=anemometer --password=superSecurePass \
                      --review h=127.0.0.1,D=slow_query_log,t=global_query_review \
                      --review-history h=127.0.0.1,D=slow_query_log,t=global_query_review_history \
                      --no-report --limit=0% \ 
                      --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" \ 
                      /data/mysql/slow-query.log
    
    

    만약 pt - query - digest version < = 2.2
    $  pt-query-digest --user=root --password=root  --review h=127.0.0.1,D=slow_query_log,t=global_query_review --history h=127.0.0.1,D=slow_query_log,t=global_query_review_history  --no-report --limit=0%  --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\""  /data/mysql/slow-query.log
    
    
    Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57A" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 27.
    Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57B" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 28.
    Pipeline process 11 (aggregate fingerprint) caused an error: Argument "57C" isn't numeric in numeric gt (>) at (eval 40) line 6, <> line 29.
    

    위의 예 에서 보 듯 이 스 크 립 트 에 문제 가 없 는 것 을 보 았 다 면 그 는 현재 작업 을 출력 할 뿐 입 니 다.
    Anemometer 설정
    Anemometer 프로필 수정
    $ cd anemometer/conf
    $ cp sample.config.inc.php config.inc.php 
    

    예제 설정 파일 에 서 는 데이터 베 이 스 를 연결 하여 느 린 조회 의 분석 데 이 터 를 가 져 올 수 있 도록 일부 수정 이 필요 합 니 다. datasource localhost. inc. php 파일 의 설정 을 수정 합 니 다. 주로 호스트 입 니 다.
    $conf['datasources']['localhost'] = array(
        'host'  => '127.0.0.1',
        'port'  => 3306,
        'db'    => 'slow_query_log',
        'user'  => 'root',
        'password' => 'root',
        'tables' => array(
            'global_query_review' => 'fact',
            'global_query_review_history' => 'dimension'
        ),
            'source_type' => 'slow_query_log'
    );
    

    그리고 127.0.0.1 / anemometer 를 방 문 했 을 때 나 타 났 어 요.
    Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'slow_query_log.dimension.sample' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (1055)
    

    sql mode 에서 only full group by 를 닫 아야 합 니 다.
    Anemometer 의 explain 기능 을 이용 하여 실행 계획 을 가 져 오 려 면 설정 파일 의 아래 부분 을 수정 하 십시오.
    $conf['plugins'] = array(
         'visual_explain' => '/usr/local/bin/pt-visual-explain',  --            
            ...
        'explain'       =>      function ($sample) {
            $conn['user'] = 'anemometer';
            $conn['password'] = 'superSecurePass';
    
            return $conn;
        },
    );
    

     
    결과 전시:
    5.7 에서 기본 SQL MODE 는 ONLY FULL GROUP BY 를 사용 합 니 다. 닫 아야 합 니 다. 그렇지 않 으 면 Anemometer 가 잘못 보 고 됩 니 다.
    해당 열 을 선택 하고 search 를 클릭 하면 결 과 를 표시 할 수 있 습 니 다.
    sql 실행 계획 보기 및 역사
    우리 가 sql 의 hash 값 을 선택 할 때 그의 구체 적 인 실행 계획 을 볼 수 있 고 이 sql 에 맞 는 역사 sql, 소모, 표 의 통계 정보, 건축 표 문 등 도 볼 수 있 습 니 다.
    또한 sql 에 대한 논평, sql 최적화 제출 제안 등 도 할 수 있 습 니 다.
    느 린 로그 스 크 립 트 자동 수집 만 들 기
    anemometer 아래 script 파일 에 수집 스 크 립 트 가 있 습 니 다. crontab 를 통 해 정시 에 느 린 로 그 를 수집 할 수 있 습 니 다. 문법 은 다음 과 같 습 니 다.
    Usage: ./scripts/anemometer_collect.sh --interval 
    
    Options:
        --socket -S              The mysql socket to use
        --defaults-file          The defaults file to use for the client
        --interval -i            The collection duration
        --rate                   Set log_slow_rate_limit (For Percona MySQL Only)
    
        --history-db-host        Hostname of anemometer database server
        --history-db-port        Port of anemometer database server
        --history-db-name        Database name of anemometer database server (Default slow_query_log)
        --history-defaults-file  Defaults file to pass to pt-query-digest for connecting to the remote anemometer database
    
    

    예제 스 크 립 트:
    cd anemometer 
    mkdir etc
    cd etc
    vi anemometer.local.cnf   --        ,       
    [client]
    user=anemometer_local
    password=superSecurePass
    ./scripts/anemometer_collect.sh --interval 30 --history-db-host=127.0.0.1
    
    

    문장 탐색

    좋은 웹페이지 즐겨찾기