
背景
好久没有更新文章了,请相信我绝对不是因为投资亏麻了心情不好。而是因为我去准备黑科技了。
我搞了一个叫 `bcc-python` 的项目,通过 eBPF 非常简单的拿到 `linux kernel event`。如果内核的事件我都知道,那程序做了些什么不就完全暴露在我眼皮子下了吗?
老夫现在再也不怕 mysql hang 死在我面前了。
安装工具
第一步 安装依赖
yum -y install bcc-tools第二步 安装我的 `bcc-python` 前端
pip3 install bcc-python到了这里你就可以直接使用 bcc-python 提供的 90几个观测程序,包括内存、网络、磁盘、cpu 、进程 ... !好了不吹了,就到这里开始干正事。
观测 create database 会有几个 IO
第一步 找到 mysqld 的 PID
ps -ef | grep mysqld
mysql33+ 2778958 1 0 20:07 ? 00:00:04 /usr/local/mysql-8.0.29-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my-3306.cnf
root 2794044 2791894 0 20:47 pts/6 00:00:00 grep --color=auto mysqld第二步 通过 bcc-python 提供的 filetop 程序来观测 `2778958` 号进程的 IO 读写情况 .
filetop -C -s all -p 2778958 10 1第三步 给它来一个 create database 把库建上,看有几次 IO .
create database tempdb;
Query OK, 1 row affected (1.01 sec)观察结果
filetop -C -s all -p 2778958 10 1
Tracing... Output every 10 secs. Hit Ctrl-C to end
22:00:48 loadavg: 0.00 0.00 0.00 1/383 2784106
TID COMM READS WRITES R_Kb W_Kb T FILE
2778971 mysqld 0 2 0 80 R #ib_16384_0.dblwr
2778976 mysqld 0 3 0 1 R ib_logfile0
2779788 mysqld 0 1 0 0 R mysql-bin.000002
我还是整理一下程序的输出,这样方便直接看结果。
MySQL 版本 | 文件名 | 写入次数 |
|---|---|---|
8.0.29 | #ib_16384_0.dblwr | 2 |
ib_logfile0 | 3 | |
mysql-bin.000002 | 1 |
结论
`create database` 需要 6 次 写 IO ,当然不同的 MySQL 版本和配置,都会影响到这个值。但这有什么问题呢?只要你安装上了 bcc-python ,性能工程师带你一发入魂。
github 开源地址:`https://github.com/Neeky/bcc-python` .