>  기사  >  데이터 베이스  >  MySQL의 pt-query-digest 도구 사용기록 분석 예시

MySQL의 pt-query-digest 도구 사용기록 분석 예시

藏色散人
藏色散人앞으로
2022-11-30 17:07:011598검색

이 글에서는 mysql의 느린 쿼리 로그를 분석하기 위한 도구인 pt-query-digest를 주로 소개합니다. 모두에게 도움이 되기를 바랍니다.

1. 소개

pt-query-digest는 mysql 느린 쿼리 로그를 분석하는 도구이며 "SHOW PROCESSLIST" 및 MySQL의 쿼리 tcpdump에 있는 프로토콜 데이터도 분석할 수 있습니다. 분석 로그를 지정된 파일로 출력하고 로그 파일을 분석하여 해당 최적화 및 기타 작업을 수행할 수 있습니다.

2. 다운로드 및 설치

  • 시스템 설치에 따라 내 시스템은 centos이므로 직접 centos 설치를 선택하고, 다운로드하려면 클릭
  • yum을 사용하여 직접 설치
> wget https://downloads.percona.com/downloads/percona-toolkit/3.4.0/binary/redhat/7/x86_64/percona-toolkit-3.4.0-3.el7.x86_64.rpm
> yum install percona-toolkit-3.4.0-3.el7.x86_64.rpm
  • 또는 소스를 사용하세요. 컴파일을 위한 코드 패키지 설치
> wget https://downloads.percona.com/downloads/percona-toolkit/3.4.0/source/debian/percona-toolkit-3.4.0.tar.gz
> tar -zxvf percona-toolkit-3.4.0.tar.gz
> cd percona-toolkit-3.4.0
> perl Makefile.PL PREFIX=/usr/local/percona-toolkit
> make && make install

3. 설치 완료

  • MySQL의 pt-query-digest 도구 사용기록 분석 예시

4 msql의 느린 쿼리 로그 분석

  • pt-query-digest 매개변수 perldoc 명령을 사용하여
    perldoc /usr/bin/pt-query-digest
  • 를 볼 수 있습니다.
  • 느린 로그 파일 전체를 분석
    pt-query-digest mysql-slow.log > slow_report.log
  • 지정된 시간의 로그를 분석부터~until
    pt-query-digest mysql-slow.log --since '2022-10-01 00:00:00' --until '2022-11-05 00:00:00'  > slow_report_date_20221021-202221105.log
    • –since: 시작 시간을 나타냄
    • –until: 종료 시간을 나타냄
  • 느린 로그를 분석하여 분석 결과 저장 mysql 데이터 table
    pt-query-digest --user=root --password=123456 --history 
    h=192.168.33.10,D=local_test_db,t=query_review --create-history-table  mysql-slow.log  --since 
    '2022-11-01 00:00:00' --until '2022-11-05 00:00:00'
    • –user: 데이터베이스 사용자 이름
    • –password: 데이터베이스 비밀번호
    • h: 데이터베이스 호스트
    • D: 데이터베이스 이름
    • t: 생성된 테이블 이름

5. 결과 분석

1부: 일반 분석 개요

  • 전체: 총 쿼리 수

  • 시간 범위: 쿼리 실행 시간 범위

  • 고유: 고유 쿼리의 수, 즉 쿼리가 어떻게 실행되는지 쿼리 조건을 매개변수화한 후 총 다양한 쿼리가 있습니다

  • total: 모든 쿼리의 총 기간

  • min: 모든 쿼리의 최소 기간

  • max: 모든 쿼리의 최대 기간

  • avg : 모든 쿼리의 평균 기간

  • 95%: 모든 기간 값을 결합합니다. 작은 것부터 큰 것까지 정렬되며, 기간 숫자는 95%에 위치하며, 이 숫자는 일반적으로 참고용으로 가장 가치가 있습니다

  • median: 중앙값, 전체 기간 값은 작은 것부터 큰 것 순으로 정렬되며 기간 숫자는 중간에 위치합니다

  • # A software update is available:
    
    # 23.7s user time, 15.8s system time, 35.67M rss, 249.01M vsz
    说明:
    执行过程中,在用户中所花费的所有时间
    执行过程中,在内核空间中所花费的所有时间
    pt-query-digest 进程所分配的内存大小
    pt-query-digest 进程所分配的虚拟内存大小
    
    # Current date: Mon Nov  7 09:01:23 2022
    说明:当前时间
    # Hostname: localhost.localdomain
    说明:执行pt-query-digest的主机名
    # Files: mysql-slow.log
    说明:被分析的文件名称
    # Overall: 44.78k total, 54 unique, 0.01 QPS, 0.07x concurrency __________
    说明:
    total: 语句总数量
    unique: 唯一语句数量
    QPS: 每秒查询量
    concurrency: 查询的并发
    
    # Time range: 2022-10-01 00:00:03 to 2022-11-04 16:05:24
    说明:执行过程中日志记录的时间范围
    # Attribute          total     min     max     avg     95%  stddev  median
    说明:属性            总计      最小值   最大值  平均值   95%  标准差   中位数
    95%: 把所有时长值从小到大排列,位置位于 95% 的那个时长数,这个数一般最具有参考价值
    median: 中位数,把所有时长值从小到大排列,位置位于中间那个时长数
    
    # ============     ======= ======= ======= ======= ======= ======= =======
    # Exec time        204553s      3s   1540s      5s     10s      8s      3s
    说明:执行时间
    # Lock time             8s       0   107ms   186us    80us     2ms    36us
    说明:锁占用时间
    # Rows sent        238.87M       0   2.88M   5.46k   11.95  68.22k    0.99
    说明:发送到客户端的行数
    # Rows examine      73.56G       0   5.01M   1.68M   3.86M 724.49k   1.32M
    说明:扫描的语句行数
    # Query size         8.18M      30   4.36k  191.46  511.45  224.63   72.65
    说明:查询的字符数

Part 2: Analysis

  • Rank: 기본적으로 쿼리 시간을 기준으로 내림차순으로 모든 문의 순위를 지정합니다. –order-by

    • –order-by Query_time:sum: 총 쿼리 시간 내림차순
      매개변수 정렬 소개:
      sum Sum/total 속성값(기본값)
      min 최소 속성값(최소값)
      max 최대 속성 값(최소 값)
      cnt 쿼리 빈도/횟수(sql 발생 횟수 기준)
  • 쿼리 ID: 문의 ID(추가 공백 및 텍스트 문자 제거, 해시 값 계산)

  • Response: 총 응답 시간

  • time: 이 분석에서 이 쿼리의 총 시간 비율

  • Calls: 실행 횟수, 즉 이 분석에서 이 유형의 쿼리 문의 총 수

  • R/Call: 각 실행의 평균 응답 시간

  • V/M: 응답 시간 Variance-to- 평균 비율

  • Item: 쿼리 개체

# Profile
说明:分析
# Rank Query ID                            Response time    Calls R/Call  
# ==== =================================== ================ ===== ======= 
#    1 0xC000AA97F210B2AEAE4933AF9B00296A  104236.2061 5... 30988  3.3638  0.03 SELECT xxx
#    2 0x974C6E6D54DB8B0DF505CA7BDC508686  32167.9607 15.7%  3418  9.4113  1.34 SELECT xxx 
#    3 0x6BE180C5804B585F25BB16550447DC6C  18453.0185  9.0%  2499  7.3842  0.92 SELECT xxx
#    4 0xADF16E3E9EB5D6B08245E39FF1428C9F  17873.4338  8.7%  3114  5.7397  0.84 SELECT xxx 
#    5 0x2964CD629A24595719659BDAEBCF0E6F  10648.5404  5.2%  1437  7.4103  0.93 SELECT xxx
#    6 0x50566E6DCF8FA562B88AE41AB1E32DC6   7424.3855  3.6%   303 24.5029 15.41 SELECT xxx
#    7 0xDB0A3D60F85C2212C476B144E1678AB8   5327.8370  2.6%  1627  3.2746  0.05 SELECT xxx
#    8 0x04BB0B332CEED517298AB06DE2A30AD6   3190.6822  1.6%   657  4.8564  1.36 SELECT xxx    
#   10 0xDAB0AF524151C621DC0E9B92AC002C38    526.6288  0.3%   140  3.7616  0.01 SELECT xxx 
# MISC 0xMISC                               1807.1067  0.9%    57 31.7036   0.0 <27 ITEMS>

3부: 특정 SQL 통계 및 분석

  • pct: 모든 느린 쿼리 문의 실행 속성에 대한 이 SQL 문의 실행 속성의 비율

  • total: SQL 문의 실행 속성의 모든 속성 시간.

  • Count: SQL 문이 실행된 횟수입니다. 해당 pct는 이 SQL 문이 실행된 횟수를 모든 느린 쿼리 문이 실행된 횟수(아래 그림의 69%)에 대한 백분율로 나타내며, 해당 합계는 총 30988번의 실행을 나타냅니다.

  • 실행 시간: sql 실행 시간

  • 잠금 시간: 실행 중 sql 잠금 시간

  • 전송된 행: 전송된 유효한 데이터는 선택 쿼리 문에서만 값을 가집니다.

  • 행 검사: 쿼리된 총 개수 데이터, 비대상 데이터.

  • Query_time 분포: 쿼리 시간 분포

  • SQL 문: 아래 그림에서 sleep(7)G

# Query 1: 0.01 QPS, 0.03x concurrency, ID 0xC000AA97F210B2AEAE4933AF9B00296A at byte 221452362
说明:查询队列1:每秒查询量,查询的并发,队列1的ID值,对应第二部分的Query ID, 221452362表示偏移量(查看方法看下面的“查看偏移”)
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.03
# Time range: 2022-10-01 00:00:05 to 2022-11-04 16:05:24
说明:sql语句在慢日志文件mysql_slow.log出现的时间范围
# Attribute    pct   total     min     max     avg     95%  stddev  median
说明:属性      占整个 总数      最小值  最大值   平均值  95%   标准差  中间值
           分析中
           的百分
           比                
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         69   30988
说明:执行语句总数量
# Exec time     50 104236s      3s      7s      3s      4s   303ms      3s
说明:执行时间
# Lock time     24      2s    22us    93ms    65us    66us   775us    38us
说明:锁占用时间
# Rows sent      0  70.53k       0     799    2.33    3.89   16.60    0.99
说明:发送到客户端的行数
# Rows examine  54  40.28G   1.32M   1.35M   1.33M   1.32M  15.65k   1.32M
说明:扫描语句的行数
# Query size    26   2.16M      73      73      73      73       0      73
说明:查询的字符数
# String:
# Hosts        localhost
说明:使用的数据主机IP
# Users        xxx
说明:使用的用户
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ################################################################
#  10s+
说明:查询时间分布
# Tables
#    SHOW TABLE STATUS LIKE &#39;xxx&#39;\G
#    SHOW CREATE TABLE `xxx`\G
# EXPLAIN /*!50100 PARTITIONS*/
select * from `table_name` where `updated_at` >= &#39;2022-10-15 00:00:40&#39;\G
说明:查询的mysql语句
第三部分是每一种查询比较慢的 sql 的详细统计结果
pct:该 sql 语句某执行属性占所有慢查询语句某执行属性的百分比
total:该 sql 语句某执行属性的所有属性时间。
Count:sql 语句执行的次数。
Exec time:sql 执行时间
Lock time:sql 执行期间被

Six View Offset

  • 을 선택합니다. 느린 쿼리에서는 오프셋을 사용할 수 있습니다. log 파일에서 특정 SQL 문을 찾기 위한 검색 방법은 다음과 같습니다.
[localhost]# tail -c +221452362 ./mysql-slow.log | head
t: root[root] @ localhost []  Id: 13704150
# Query_time: 7.058835  Lock_time: 0.000040 Rows_sent: 2  Rows_examined: 1392521
SET timestamp=1665763267;
select * from `xxxxxx` where `updated_at` >= &#39;2022-10-15 00:00:40&#39;;
# User@Host: root[localhost] @ localhost []  Id: 13704174
# Query_time: 7.445741  Lock_time: 0.000015 Rows_sent: 3  Rows_examined: 2214002
SET timestamp=1665763267;
select xxx from table where xxx
# Time: 221015 008
# User@Host: root[localhost] @ localhost []  Id: 13704414

위 내용은 MySQL의 pt-query-digest 도구 사용기록 분석 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제