-
Notifications
You must be signed in to change notification settings - Fork 135
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
用 eBPF trace PostgreSQL 的几种姿势 #257
Comments
有个疑问,为什么要为 PG 专门写一个 ebpf profiler,而不用之前的 dtrace 呢 |
|
SGTM |
正确的!使用 https://github.com/cilium/ebpf 这个用户态 go lib 可以编译出静态链接 elf,再也不用安装 bcc 那些奇怪的依赖了。 |
very good ! 打算好好整整,为自家DB写一套工具,到时候惊艳一下 😄 |
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
前
用 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!
还有配套的视频:https://www.youtube.com/watch?v=5BEEQqcF6Ms
PGTracer
PGTracer 是 2022 年诞生的第一个 eBPF 来观测 pg 的企业项目,来自 aiven 这个公司,这个项目的定位也很有意思从最开始的 perf 工具到现在的工具集,它会把一个查询的整体信息打印出来,帮助大家观察查询,更有意思的是,它还包括了查询计划,如图:
pg-lock-tracer
pg-lock-tracer 是 2023 年诞生的新项目,作者是这个项目专注于 trace pg 中的各种锁,作者还把 lock 和 lwlock 区分开来 trace, 还可以直接生成 dot 图,方便学习,观测以及 debug.
Lock statistics:
dot 图:
作者 @jnidzwetzki 还写了两篇介绍文章
我也想写一个工具
如果大家也想写一个类似的工具如何入手呢?
我在去年给 ecapture 提了一个支持 pg 的 PR 大家可以参考:
未来展望
2024.06.13 更新
有了个看起来非常好的新项目
https://github.com/ChrisBellew/pg-ferret
The text was updated successfully, but these errors were encountered: