MySQL 分析利器 strace & Perf

Perf

  安装perf

    yum install -y perf

  执行:

    perf top  /  grep " " * -r

Strace介绍及用途

  strace 是一个用于诊断,分析linux用户态进程的工具  (pstrace,losf, gbd, pstrack, pt-pmp)

MySQL启动后会启动多少线程

  strace /usr/local/mysql/bin/mysqld

   # /usr/local/mysql/bin/mysqld --verbose --help | grep my.cnf
  /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
  my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default

  操心系统查看:

    ps -T `pidof mysqld`

  利用pstack 

    pstack `pidof mysql`

  推荐MySQL5.7以上的版本

    select thread_id ,name from performanct_schema.threads

使用strace的正确姿势

  最简单使用

    strace -T -t -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 -o /tmp/strace.log CMD

    strace -T -tt -s 100 -e trace = XXXX -o /tmp/strace.log CMD

  strace参数

    -c 统计每一系统调用的所执行的时间,次数,和出错的次数等

    -d 输出strace关于标准错误的调试信息

    -f 跟踪由fork调用所产生的子进场

    -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各

    -r 打印出相对时间关于,, 每一个系统调用

    -t 在输出中的每一行前加上时间信息

    -tt 在输出中的每一行前加上时间信息,微秒级

    -T 显示每一调用所消耗的时间,这个参数在排查性能问题时特别有用

    -v 输出所有的系统调用,一些调用关于环境变量,状态,输出输入等调用由于使用频繁,默认不输出

    -a column 设置返回值的输出位置,默认为40.

    -e expr 指定一个表达式,用来控制如何跟踪

如果匹配conn_id 和 os_thread_id

  MySQL 5.7 & 8.0

    可以利用sys.processlist 和 performance_schema.threads 进行关联

    select thd_id, conn_id, thread_os_id, name from sys.processlist a, performance_shcema.threads b where a.thd_id = b.thread_id and conn_id >0;

  gdk attach xxxx 跟踪线程,这个动作会导致要跟的进程进行卡着

利用strace观察client的SQL执行

    ls /proc/`pidof mysqld`/fd -l

利用strace观察server端执行

猜你喜欢

转载自www.cnblogs.com/yujiaershao/p/11355937.html