使用链路时延检测采集分析MySQL函数信息
简要示范两种使用方式对MySQL应用的函数信息进行采集,第一种是应用未启动时通过加载so库的方式启动MySQL服务端并采集指定函数信息,第二种是应用处于运行态时通过attach的方式对mysqld进程的热点函数信息进行采集。
启动时加载模式(Launch Mode)
图1 示例流程图


- 将工具包上传至服务器。
- 将tracelib-collector-aarch64.tar.gz解压到“/home/collector”目录。
1tar -zxvf tracelib-collector-aarch64.tar.gz -C /home/collector
- 准备配置文件(自行创建或使用symbol工具)。
- 自行创建配置文件。以采集名为“mysql_parse”和“do_command”的函数为例,首先通过nm mysqld | grep -e mysql_parse -e do_command命令确认mangling name:
1 2 3 4
# nm 输出结果 ...(省略) 0000000000bafa04 T _Z10do_commandP3THD 0000000000bada20 T _Z11mysql_parseP3THDP12Parser_state
在当前目录下创建配置文件。
1vi /home/collector/config按“i”进行编辑,填入查找到的符号名:
_Z10do_commandP3THD _Z11mysql_parseP3THDP12Parser_state
按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 使用symbol工具生成配置文件。
以采集名为“JOIN::extract_func_dependent_tables”的函数为例。
1 2
cd /home/collector ./symbol mysqld -e 'JOIN&extract_func_dependent_tables' -o ./config
将在/home/collector目录下自动生成名为config的配置文件。
- 自行创建配置文件。
- 配置环境变量并启动mysqld进程。
1LD_LIBRARY_PATH=/home/collector:$LD_LIBRARY_PATH LD_PRELOAD=/home/collector/librecord.so RECORD_CONF=/home/collector/config mysqld -uroot
- 在另一终端通过sysbench模拟测试。
1sysbench ./tests/include/oltp_legacy/select.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=123 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=1 --report-interval=1 run
- 采集完成后通过Ctrl+C或kill命令终止mysqld进程。
在目录“/home/collector/record.data”下已生成采集到的数据。
- 使用analyze工具分析采集到的数据并汇总结果至statistics目录下。
1./analyze ./record.data/ -m --demangle -o ./statistics
返回信息如下:
1[info] Report saved to ./statistics/merged_summary.txt
- 查看汇总数据。
1cat ./statistics/merged_summary.txt文件内容如下:
1 2 3 4 5 6 7 8
JOIN::extract_func_dependent_tables() count: 144878.00 avg: 10975.76 max: 725110.00 min: 3310.00 P90: 13400.00 P75: 10860.00 P50: 8290.00
汇总报告包含函数的平均耗时/最大耗时/P90等数据,可根据这些数据找到对应函数进行分析。
运行时挂载模式(Attach Mode)
图2 示例流程图


- 将工具整包上传至服务器“/home”目录下。
- 解压并进入工具目录。
1 2
tar -zxvf DevKit-CLI-x.x.x-Linux-Kunpeng.tar.gz cd DevKit-CLI-x.x.x-Linux-Kunpeng
- 在当前终端启动MySQL服务端。
1mysqld -uroot &
输入密码后启动。
- 查看mysqld进程号。
1ps -ef | grep mysqld
回显如下:
1root 3899932 2429790 0 19:05 pts/8 00:00:00 /application/mysql/bin/mysqld -uroot
进程号为3899932。
- 在当前终端通过进程号对mysqld进程的热点函数进行采集。
1./devkit advisor knet attach -p 3899932 -o ./record.data --hotspot
采集的数据将生成在“/home/DevKit-CLI-x.x.x-Linux-Kunpeng/record.data/”。
- 在另一终端通过sysbench模拟测试10秒。
1sysbench ./tests/include/oltp_legacy/select.lua --mysql-host=localhost --mysql-port=3306 --mysql-user=root --mysql-password=123 --oltp-test-mode=complex --oltp-tables-count=10 --oltp-table-size=100000 --threads=10 --time=10 --report-interval=1 run
- 采集完成后结束mysqld进程。
1kill 3899932
- 使用单独工具包中analyze工具分析数据。
1 2 3
tar -zxvf tracelib-collector-aarch64.tar.gz -C /home/collector cd /home/collector ./analyze /home/DevKit-CLI-x.x.x-Linux-Kunpeng/record.data -m --demangle -o ./statistics -n 20
回显如下:
1[info] Report saved to ./statistics/merged_summary.txt
- 查看分析结果文件。
1vim ./statistics/merged_summary.txt可见热点函数net_read_packet、vio_io_wait等的调用信息,函数的平均耗时/最大耗时/P99等数据。
文件内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
...(省略) net_read_packet(st_net*, unsigned long*) count: 455322.00 avg: 13024.40 max: 608010.00 min: 4310.00 P90: 14830.00 P75: 13690.00 P50: 12550.00 vio_io_wait count: 3177.00 avg: 11934.38 max: 579860.00 min: 2080.00 P90: 26030.00 P75: 13030.00 P50: 4870.00 __poll count: 3154.00 avg: 9714.93 max: 575420.00 min: 1500.00 P90: 23477.00 P75: 10760.00 P50: 2700.00 net_read_raw_loop(st_net*, unsigned long) count: 905188.00 avg: 4441.90 max: 593240.00 min: 2570.00 P90: 5330.00 P75: 4810.00 P50: 4230.00 vio_read count: 908952.00 avg: 2435.08 max: 590750.00 min: 1350.00 P90: 3180.00 P75: 2890.00 P50: 2410.00
父主题: 链路时延检测