Open yihong0618 opened 1 year ago
有个疑问,为什么要为 PG 专门写一个 ebpf profiler,而不用之前的 dtrace 呢
有个疑问,为什么要为 PG 专门写一个 ebpf profiler,而不用之前的 dtrace 呢
SGTM
如果用 go 的同学可以把 bcc 换成 cilium
正确的!使用 https://github.com/cilium/ebpf 这个用户态 go lib 可以编译出静态链接 elf,再也不用安装 bcc 那些奇怪的依赖了。
very good !
打算好好整整,为自家DB写一套工具,到时候惊艳一下 😄
very good !
打算好好整整,为自家DB写一套工具,到时候惊艳一下 😄
前
用 eBPF 来观测用户空间应用程序这几年越来越火了,诞生了不少开源的应用,但在数据库这个领域相关的应用还不算太多,特别是 PostgreSQL. 在这个领域之前没那么多人研究可能的原因:
发展
bcc
bcc 是自带 mysql 和 postgres 的例子的, 可以观测慢查询和 latency 但针对 pg 必须开启 dtrace 才能使用
postgres-bcc
能不能不用 dtrace 而只使用 eBPF 的 uprobe 来观测 pg 的查询呢?答案是能的:
就像 mysql 的查询入口是 dispatch_command 一样,要使用 uprobe 来 trace 的函数入口是 exec_simple_query 之前在 GitHub 上查询一下,最早把 trace postgres 写成应用的是 postgres-bcc 作者应用 bcc 且不用开启 pg 自带的 dtrace 写了一系列 trace pg 的小工具,工具包括:
这个项目相比 bcc examples 可以说是非常成熟,作者把 kprobe 和 uprobe 结合起来,来从用户态和内核态来一起观测 pg, 更厉害的是,作者还写了一篇的文章:
PostgreSQL at low level: stay curious!![image](https://user-images.githubusercontent.com/15976103/215249027-5f8dc258-4626-4da0-b684-96e2502e1466.png)
还有配套的视频:https://www.youtube.com/watch?v=5BEEQqcF6Ms![image](https://user-images.githubusercontent.com/15976103/215251935-5fdc2642-35c9-4b10-ab0d-097f04739280.png)
PGTracer
PGTracer 是 2022 年诞生的第一个 eBPF 来观测 pg 的企业项目,来自 aiven 这个公司,这个项目的定位也很有意思从最开始的 perf 工具到现在的工具集,它会把一个查询的整体信息打印出来,帮助大家观察查询,更有意思的是,它还包括了查询计划,如图:
pg-lock-tracer
pg-lock-tracer 是 2023 年诞生的新项目,作者是这个项目专注于 trace pg 中的各种锁,作者还把 lock 和 lwlock 区分开来 trace, 还可以直接生成 dot 图,方便学习,观测以及 debug.
Lock statistics:![image](https://user-images.githubusercontent.com/15976103/215251440-ee1c41c5-929d-4a59-a84a-97b13333b2a7.png)
dot 图:![image](https://user-images.githubusercontent.com/15976103/215252026-71ae2e43-d758-4d42-a5d6-81882226cb93.png)
作者 @jnidzwetzki 还写了两篇介绍文章
我也想写一个工具
如果大家也想写一个类似的工具如何入手呢?
我在去年给 ecapture 提了一个支持 pg 的 PR 大家可以参考:
未来展望
2024.06.13 更新
有了个看起来非常好的新项目 https://github.com/ChrisBellew/pg-ferret![image](https://github.com/yihong0618/gitblog/assets/15976103/8cae0a2f-369e-4e34-9036-457261187df2)