이 글에서는 mysql의 느린 쿼리 로그를 분석하기 위한 도구인 pt-query-digest를 주로 소개합니다. 모두에게 도움이 되기를 바랍니다.
1. 소개
pt-query-digest는 mysql 느린 쿼리 로그를 분석하는 도구이며 "SHOW PROCESSLIST" 및 MySQL의 쿼리 tcpdump에 있는 프로토콜 데이터도 분석할 수 있습니다. 분석 로그를 지정된 파일로 출력하고 로그 파일을 분석하여 해당 최적화 및 기타 작업을 수행할 수 있습니다.
2. 다운로드 및 설치
> 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. 설치 완료
4 msql의 느린 쿼리 로그 분석
perldoc /usr/bin/pt-query-digest
pt-query-digest mysql-slow.log > slow_report.log
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
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'
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
쿼리 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 'xxx'\G # SHOW CREATE TABLE `xxx`\G # EXPLAIN /*!50100 PARTITIONS*/ select * from `table_name` where `updated_at` >= '2022-10-15 00:00:40'\G 说明:查询的mysql语句 第三部分是每一种查询比较慢的 sql 的详细统计结果 pct:该 sql 语句某执行属性占所有慢查询语句某执行属性的百分比 total:该 sql 语句某执行属性的所有属性时间。 Count:sql 语句执行的次数。 Exec time:sql 执行时间 Lock time:sql 执行期间被
Six View Offset
[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` >= '2022-10-15 00:00:40'; # 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!