# 你的数据库正在“裸奔”?这个中间人工具,让所有 SQL 无处遁形 说实话,看到有人在评论区说,用这个工具接了一下 WordPress 站点,结果屏幕上瞬间刷出几百条 SQL 查询,我差点笑出声。 这哪里是在看数据,简直是在看“惨案”现场。 怪不得那个站点慢得像蜗牛,原来每一次请求都在疯狂轰炸数据库。 这就是今天要聊的主角 —— **sql-tap**。 一个刚在 GitHub 上火起来的开源小工具,号称能让你的数据库流量“实时裸奔”。 ![demo](https://github.com/mickamy/sql-tap/raw/main/docs/demo.gif) ## 把“中间人”做成了一门艺术 这玩意儿的逻辑简单粗暴,甚至有点“损”。 它不直接连你的数据库,而是让你把应用连到它身上,它再转发请求给真正的 PostgreSQL 或 MySQL。 说白了,它就是个**代理**。 但它又不只是个简单的转发器。 sql-tap 坐在你的应用和数据库中间,像个监听器一样,把所有流经的 SQL 语句全部截获,然后扔到一个交互式的终端界面(TUI)里给你看。 这就好比你寄信,邮递员在送信之前,先把信纸掏出来复印一份,贴在橱窗里供人参观。 虽然听着有点侵犯隐私,但在开发调试的时候,这功能简直爽得飞起。 ![demo](https://github.com/mickamy/sql-tap/raw/main/docs/demo.gif) ## 不改一行代码,就能“透视” 老实讲,我之前最烦的就是排查慢查询。 你得去服务器翻日志,或者笨拙地开启数据库的 general log,不仅麻烦,还容易把线上环境搞崩。 sql-tap 解决了这个痛点。 你不需要改任何应用代码,只需要把数据库连接地址改一下,指向它的代理端口。 比如你的 PostgreSQL 原本在 `5432` 端口,现在你让应用连 `5433`,剩下的交给它。 启动代理,再启动 UI 客户端,搞定。 所有查询、事务、执行时间、受影响行数,甚至错误信息,都会像黑客电影里的数据流一样,实时滚过你的屏幕。 ## 只有老司机才懂的“键盘快感” 有意思的是,它的 UI 界面完全是给极客设计的。 没有花里胡哨的按钮,全靠键盘快捷键操作。 如果你习惯用 Vim,你会觉得像回到了家。 `j` 和 `k` 上下移动,`/` 搜索,`Enter` 查看详情。 最骚的是,你可以在界面上直接按 `x`,对当前查询运行 `EXPLAIN`。 甚至可以按 `e` 先编辑一下 SQL,再跑 `EXPLAIN ANALYZE`。 这意味着什么? 意味着你不用切窗口,不用复制粘贴,在一个终端里就能完成“发现慢查询 -> 分析原因 -> 验证优化”的全套动作。 ## 并不是所有人都买账 当然,工具再好,也有争议。 在 Hacker News 的评论区,有人直接泼了冷水。 一位自称开发过 Envoy Postgres 插件的老哥直言:**透明代理并不是观察性的最佳模式**。 理由很充分:**延迟**。 虽然作者声称只增加了“微秒级”的延迟,但多一跳就是多一跳。 多了一次 TCP 握手,多了一次数据转发,在高并发场景下,这点开销会被放大。 还有人问:**“为什么要搞个代理?直接抓包不行吗?”** 或者 **“直接开 MySQL 的 general log 不香吗?”** 我个人觉得,这得看场景。 如果你是在生产环境做全天候监控,抓包或者原生日志确实更稳妥,毕竟代理本身就是个单点故障风险。 但如果你是在开发环境、测试环境,或者像我一样只是想快速排查一下某个诡异 Bug,sql-tap 这种“即插即用”的视觉化体验,绝对比看枯燥的日志文件要香一万倍。 ## 最后的思考 技术选型从来就没有标准答案,只有适合与不适合。 为了那一点极致的性能,牺牲掉调试的便利性,值得吗? 反过来,为了看清数据库的每一次心跳,多承受几微秒的延迟,你能接受吗? 反正下次我的 WordPress 再卡住的时候,我会毫不犹豫地把这把“手术刀”插进去看看。