利用strace和perf分析MySQL运行

利用strace和perf分析MySQL运行
周万春

perf
strace
pstack
pt-pmp
都是一类工具

[[email protected] ~]# perf top
Samples: 330  of event ‘cpu-clock‘, 4000 Hz, Event count (approx.): 42848685 lost: 0/0 drop: 0/0
Overhead  Shared Object     Symbol
  21.09%  [kernel]          [k] vmw_cmdbuf_header_submit
  19.02%  [kernel]          [k] e1000_xmit_frame
  15.93%  [kernel]          [k] _raw_spin_unlock_irqrestore

[[email protected] ~]# cp -a /usr/local/mysql/bin/mysqld /usr/local/mysql/bin/mysqld_bak
[[email protected] ~]# ls -lh /usr/local/mysql/bin/mysqld{,_bak}
-rwxr-xr-x 1 mysql mysql 249M Sep 27 16:53 /usr/local/mysql/bin/mysqld
-rwxr-xr-x 1 mysql mysql 249M Sep 27 16:53 /usr/local/mysql/bin/mysqld_bak

[[email protected] ~]# strip /usr/local/mysql/bin/mysqld_bak
[[email protected] ~]# ls -lh /usr/local/mysql/bin/mysqld{,_bak}
-rwxr-xr-x 1 mysql mysql 249M Sep 27 16:53 /usr/local/mysql/bin/mysqld
-rwxr-xr-x 1 mysql mysql  27M Mar  8 10:36 /usr/local/mysql/bin/mysqld_bak
mysqld命令由200多M变成20多M

strace介绍及用途
    MySQL启动后默认会启动多少线程
    如何匹配conn_id和os_thread_id
    利用strace观察client的SQL执行
    利用strace观察server端执行

whereis pt-pmp
strace是一个用于诊断,分析Linux用户态进程的工具
pstrace  losf  gdb  pstack
Python写的 pstrace  pstack

简单使用
strace -T -tt -o /tmp/strace.log CMD
strace -T -tt CMD 2>&1 |tee /tmp/strace.log
strace -T -tt -s 100 -o /tmp/strace.log CMD
strace -T -tt -s 100 -ff /tmp/strace.log CMD
strace -T -tt -s 100 -e strace=xxx -o /tmp/strace.log CMD

MySQL默认启动的线程数
mysql -S /tmp/mysql.sock -p
use sys;
show tables;
select * from sys.session;
select * from performance_schema.threads;

用户态线程,用户运行的线程
select thd_id,conn_id,thread_os_id,name
    from sys.processlist a,performance_schema.threads b
        where a.thd_id = b.thread_id and conn_id > 0;

[[email protected]:mysql.sock] [(none)]> select thd_id,conn_id,thread_os_id,name
    ->     from sys.processlist a,performance_schema.threads b
    ->         where a.thd_id = b.thread_id and conn_id > 0;
+--------+---------+--------------+--------------------------------+
| thd_id | conn_id | thread_os_id | name                           |
+--------+---------+--------------+--------------------------------+
|     26 |       1 |        23452 | thread/sql/compress_gtid_table |
|    656 |     631 |        23475 | thread/sql/one_connection      |
|    657 |     632 |         5081 | thread/sql/one_connection      |
+--------+---------+--------------+--------------------------------+
3 rows in set (0.13 sec)

[[email protected]:mysql.sock] [(none)]> select * from sys.processlist;

操作系统查看
    ps -T `pidof mysqld`
利用 pstack
    pstack `pidof mysqld`
推荐MySQL 5.7以上的版本
    [[email protected]:mysql.sock] [(none)]> select thread_id,name from performance_schema.threads;

conn_id 和 os_thread_id匹配
gdb attach 3711 拿到线程
拿到线程之后跟踪线程 strace -T -tt -s 100 -p 1042

gdb attach这个动作会导致要跟踪的进程卡着。
strace -T -tt -s 100 -o ./3711_c.log -p 3711

select thd_id,conn_id,pid,program_name from sys.processlist;
select * from sys.processlist where pid=1086\G

利用strace观察client的SQL执行
开发:为什么你们DB的响应这么慢呢?应用端大量的慢查询。
DBA有点不好意思:忙去查看show log干干净净,啥也没有???~~~~~~
人在家中坐,锅从天上来。
MySQL中没有慢查询,但应用端有很多慢查询,怎么办?

利用strace观察server端执行
利用strace观察mysqld端执行
这里就需要看看mysqld相关的io操作
    mysql:read,write,open
    innodb:pread64,pwrite64
    strace -o /tmp/zst_strace.log -T -tt -f -e trace=read,open,write,pwrite64,pread64 -p `pidof mysqld`
    strace -c /usr/local/mysql/bin/mysqld

strace -o /tmp/zst_strace.log -T -tt -ff -p `pidof mysqld`
-ff 参数,在跟踪的线程fork出新的thread时,会产生一个新文件存放。

利用获取的线程id在MySQL查询时,看看都是干什么的?
select thread_id,thread_os_id,name
    from performance_schema.threads
        where thread_os_id in (15871,15872,15873,15901);

ls -l /proc/3536/fd/11

yum install ps_mem

抓包
tcpdump -i eth0 -S 0 tcp port 3306 -w xxx.cap
结合wireshark

ps -T `pidof mysqld`
top -H -c -p `pidof mysqld`

原文地址:https://www.cnblogs.com/zhouwanchun/p/12440404.html

时间: 2024-08-29 03:38:30

利用strace和perf分析MySQL运行的相关文章

strace 命令分析mysql的相关的问题

strace 命令分析mysql的相关的问题 使用方式: strace -p pid or strace command 本篇博文主要简单介绍下面关于MySQL的5个问题: 利用strace观察mysqld对my.cnf 配置文件的加载顺序 MySQL启动后默认会启动多少线程 如何匹配conn_id和os_thread_id 利用strace观察client的SQL执行 利用strace观察server端执行 1.strace观察mysqld对my.cnf 配置文件的加载顺序 命令如下: str

apache+php+mysql运行环境

很多朋友想要在window下配置apache+php+mysql运行环境,其实从这么长时间的经验来看,win2003下还是用iis,如果为了学习或对apache特别熟悉的朋友可以用apache 一 准备 1 下载apache http://httpd.apache.org/download.cgi#apache24 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi openssl表示带有openssl模块,利用openssl可给Apache配置SSL安全链接 2

如何使用strace+pstack利器分析程序性能

引言 有时我们需要对程序进行优化.减少程序响应时间.除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法吗? 若能直接找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,那相比漫无目的地看代码,效率就高多了. 将strace和pstack工具结合起来使用,就可以达到以上目的.strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用耗时:pstack工具对指定PID的进程输出函数调用栈. 下面我们通过一个简单的消息收发程序,说明使用strace.p

优化、分析Mysql表读写、索引等操作的sql语句效率优化问题

为什么要优化: 随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能会有一些差异,这时我们 就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: >主机性能>内存使用性能>网络传输性能>SQL语句执行性能[软件工程师]下面列出一些数据库SQL优化方案: (01)选择最有效率的表名顺序(笔试常考) 数据库的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表将被最先处理,在FROM子句中包含多个表的情况下,你必须选择

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

利用Cadence PCB SI分析特性阻抗变化因素

1.概要 在进行PCB SI的设计时,理解特性阻抗是非常重要的.这次,我们对特性阻抗进行基础说明之外,还说明Allegro的阻抗计算原理以及各参数和阻抗的关系. 2.什么是特性阻抗? 2.1 传送线路的电路特性 在高频率(MHz)信号中,把传送回路作为电路. 2.1.1 电阻R 电阻R是指普通的导线带有的欧姆电阻.R = ρ?L / S [Ω] (S:横截面面积[m2],L:导体长[m],ρ:金属(铜)的电阻率[Ω*m]).在高频频域范围内的话,根据表面效果和集合效果的影响,集中在导体表面电流流

利用ELKStack日志平台分析短信攻击

话说互联网的江湖一点都不风平浪静,这不刚处理完 http://fengwan.blog.51cto.com/508652/1757465 短信攻击,敌人又卷土重来,而且方法更先进. 从上面可以看到敌人通过模拟Referer对我方阵地实施打击,不断耗费我方短信资源. 通过对敌人进行画像: 分析IP 分析X-FORWARD-IP 分析设备 分析浏览器 分析浏览器版本 眼前已经一目了然,敌人虽然来自四面八方(不同的IP),但是所使用的武器是一台Samsung GT-I9505的Android 4.2.

Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程

这篇文章主要介绍了Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程,需要的朋友可以参考下 准备篇 一.环境说明: 操作系统:Windows Server 2012 R2 PHP版本:php 5.5.8 MySQL版本:MySQL5.6.15 二.相关软件下载: 1.PHP下载地址: http://windows.php.net/downloads/releases/php-5.5.8-nts-Win32-VC11-x86.zip 2.MySQL下载地址:

linux下搭建nginx+php(FastCGI)+mysql运行环境

一.安装环境 1.CentOS5.5 2.php5.4 3.MySQL5.5.19 二.安装程序依赖库和开发环境 为了省事把所需要的库文件全都安装上,可以使用rpm包安装,也可以用yum命令安装, 1 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc gli