数据库故障不一定始于大量流量。有时,一条长期占用资源的连接就足以让连接池耗尽、请求排队,甚至让整个应用看起来像“数据库挂了”。PlanetScale CLI 和 Dashboard 提供了实时连接管理能力,让开发者可以查看当前连接,并在确认风险后终止卡住的连接,缩短排障时间。
为什么一条连接也会造成连锁反应
“连接”本身通常不是问题,问题在于它持续占用数据库资源。常见场景包括:
- 一个事务开启后迟迟没有提交或回滚。
- 查询正在等待锁,后续请求不断堆积。
- 应用连接池没有正确归还连接。
- 管理脚本或交互式 SQL 会话空闲太久,却仍然保持事务状态。
- 长查询占用了线程、内存或其他并发资源。
当数据库连接数接近上限时,新请求可能无法建立连接;当连接池中的连接都在等待同一个锁时,应用侧看到的往往是超时,而不是清晰的数据库错误。此时,继续重启应用未必能解决根因,因为问题连接可能仍然存在,或者重启后又被同一个任务重新创建。
实时连接管理解决什么问题
传统排障流程通常需要登录数据库、查询进程列表、判断连接状态,再执行终止操作。PlanetScale 的实时连接管理把这类操作放进 CLI 和 Dashboard 中,便于在故障发生时快速查看活动连接并处理异常会话。
实际操作时应关注几类信息:
- 连接属于哪个数据库和分支。
- 当前执行的 SQL 或连接状态。
- 连接已经存在了多久。
- 是否处于事务中,是否正在等待锁。
- 终止连接会影响哪个应用、任务或开发者。
“实时”并不意味着可以不加判断地清理连接。终止一个正在执行写入的会话,可能触发事务回滚;终止迁移、批处理或在线操作,也可能让任务处于需要重试的状态。因此,连接管理应该是恢复服务和确认根因的一部分,而不是日常清理工具。
可以这样排查和终止连接
下面的示例使用 MySQL 兼容客户端展示通用排障流程。请将连接参数替换为实际环境,并确保当前账号拥有查看和终止其他会话所需的权限。
# 连接到目标数据库后查看完整进程列表
mysql "$DATABASE_URL" -e "SHOW FULL PROCESSLIST;"
# 只筛选可能异常的连接:运行时间较长,或处于锁等待状态
mysql "$DATABASE_URL" -e '
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO
FROM information_schema.PROCESSLIST
WHERE COMMAND <> "Sleep"
AND (TIME > 30 OR STATE LIKE "%lock%")
ORDER BY TIME DESC;
'
# 确认 ID=12345 确实是异常会话后,再终止它
mysql "$DATABASE_URL" -e "KILL 12345;"
如果使用 PlanetScale CLI,可以先通过 CLI 建立到目标数据库分支的连接,再执行同样的检查;不同 CLI 版本的连接管理命令可能有所差异,运行 pscale help 或对应子命令的帮助信息确认当前语法:
# 查看当前 CLI 支持的连接和管理命令
pscale help
pscale connect --help
# 建立到指定数据库分支的连接;参数按实际项目替换
pscale connect YOUR_DATABASE YOUR_BRANCH
在 Dashboard 中则可以打开目标数据库和分支的连接管理视图,观察实时连接,选中确认过的异常会话并执行终止操作。线上环境执行前,建议记录连接 ID、SQL、来源主机和处理时间,方便之后追查是谁创建了连接,以及为什么连接没有及时释放。
终止连接之后还要做什么
杀掉连接只能恢复被占用的资源,不能自动修复应用代码。处理完成后,应继续检查:
- 应用连接池是否设置了最大连接数、空闲超时和获取连接超时。
- 事务是否覆盖了网络请求、外部 API 调用或用户交互。
- 查询是否缺少索引,导致单条请求长期运行。
- 后台任务是否会在失败后无限重试并持续创建新连接。
- 是否需要为迁移、报表和在线请求使用不同的资源边界。
可以把连接数、长查询、锁等待和连接获取超时纳入监控。告警不应只关注“连接数超过阈值”,还要结合连接持续时间和状态,否则空闲连接池扩容可能掩盖真正的锁或事务问题。
一份更稳妥的操作清单
- 先确认目标数据库和分支,避免误操作。
- 记录连接 ID、来源、SQL 和持续时间。
- 优先终止明确卡住、等待锁或泄漏的会话。
- 避免在不了解事务影响时批量终止连接。
- 观察应用错误率、延迟和连接数是否恢复。
- 修复连接池、事务边界或查询性能问题,并为同类故障补充告警。
PlanetScale 的 CLI 和 Dashboard 让“发现并处理卡住连接”变得更直接,但真正可靠的方案仍然是连接管理、事务设计、查询优化和监控的组合。把实时终止能力作为应急工具使用,才能既快速恢复服务,又避免把一次连接故障变成数据写入或任务执行问题。