我们的文章会在微信公众号 IT民工的龙马人生 和博客网站 ( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
日常运维里,查会话、看表空间、翻一条 SQL 的执行计划,往往要分别登录客户端、打开个人脚本目录、再 SSH 到主机跑 iostat。故障出现时更被动:业务已经受影响,排查步骤你心里清楚——先看谁在等、有没有锁、主机资源是否正常——但手上还在拼连接串、找脚本文件、确认远端有没有装对应的 CLI。没有统一工具时,这些动作散落在多个窗口和笔记里,每换一步都要重新对齐环境。
ytop 是一个单二进制的终端运维工具:把连库、跑诊断 SQL、在目标机上执行常用主机小工具、以及(YashanDB 场景下)oratop 式实时监控,收进同一套命令里。
它以 YashanDB 为核心(脚本最全、监控模式完整),同时通过 -d 支持 Oracle、MySQL、PostgreSQL、SQL Server、达梦 等库的内置脚本与客户端执行路径。系列文档与场景地图仍以 YashanDB 为主线;其它库按各自脚本目录使用。
一句话定位
终端里的多库运维工具箱:内置数百条按场景整理好的 SQL / 主机脚本,加上 YashanDB 实时看板与两种「进库壳」方式(-e 真客户端、-E 本机 JDBC 壳)。不是 Web 监控平台,也不是备份/迁移/安装器。
核心价值
- 日常运维规范化:按场景地图和脚本名走固定路径(如锁、空间、SQL),巡检与变更前检查有章可循。
- 团队工作标准:统一命令、脚本与输出含义,交接和复盘可复现同一条
ytop -f …。 - 经验可传承:内置脚本承载一线做法,新人用
ytop -S和场景地图即可上手。 - 版本一致:脚本随二进制分发,全组共用同一基线,避免「每人一份旧脚本」。
- 跨库习惯延续:
-d切换库类型时工作流不变,利于 Oracle→Yashan 等迁移与多库并存。 - 缩短故障处置:少花在找工具、拼连接上的时间,更快进入看结果、做决策。
- 对外好协作:报脚本名与 ytop 版本即可对齐复现,不必来回贴大段私有 SQL。
多数据库支持(-d)
用 -d / --db-type 切换脚本目录与默认 CLI(简写见括号):
| 类型 | 简写示例 | 内置 SQL 脚本规模(约) | 说明 |
|---|---|---|---|
| YashanDB | yas、yashandb |
168 | 默认;监控模式、ASH/AWR、SQLMAP 等最全 |
| Oracle | o、ora |
260+ | 脚本量最大,多从 Oracle 运维实践沉淀 |
| PostgreSQL | p、pg |
40+ | 锁、归档、版本等 |
| MySQL | m、my |
18 | 锁、复制、InnoDB 等 |
| SQL Server | s、ms |
17 | 含 Windows 主机侧 .ps1 配合 |
| 达梦 | d、dm |
少量 | 目录在持续扩充 |
另有 30+ 条 OS 级脚本(与库类型无关,-S 里类型为 os):在目标主机上跑 iostat、pidstat、bpftrace 跟踪、YashanDB 备份/集群状态等。ytop -S 列出当前 -d 下的 SQL + OS;例如 ytop -d o -S 可见 Oracle SQL 与全部 OS 条目。
切换库类型示例:
ytop -d o --login-cmd 'sqlplus / as sysdba' -f we.sql
ytop -d m --login-cmd 'mysql -uroot -p"***" mydb' -f we.sql
ytop -d p -C "dbname=mydb user=postgres" -f lock.sql
内置能力地图(不止实时监控)
实时看板(仅 YashanDB)
不带 -f / -q / -e / -E 直接 ytop,进入交互监控:gv$sysstat 按秒变化、TOP 等待事件、可排序活跃会话、快捷键翻详情与 ad-hoc SQL。其它 -d 类型若误进默认监控,会提示仅 YashanDB 支持——查 Oracle/MySQL 等请用 -f / -q / -e。
脚本库与主机工具包(-f / -q / -S)
| 能力 | 典型入口 | 能回答什么 |
|---|---|---|
| 会话 / 等待 | ytop -f we.sql |
谁在等、跑什么 SQL、多久 |
| 锁与阻塞 | ytop -f lock.sql |
持锁/等锁、阻塞链 |
| SQL / 执行计划 | ytop -f plan_by_sqlid.sql |
按 sql_id 看计划与统计 |
| AWR / ASH | ytop -f awr_snapshot.sql |
快照、历史 TOP SQL、等待趋势 |
| 空间与库状态 | ytop -f tablespace.sql |
表空间、数据文件、库开关状态 |
| 对象 / DDL | ytop -f ddl_table.sql |
拉表/索引等 DDL |
| 统计信息 | ytop -f stats_table.sql |
收集或清理统计信息 |
| 归档 / 备库 | ytop -f arch_list.sql |
归档列表、备库状态 |
| 高危运维 | ytop -f kill_sess_by_where.sql |
按条件杀会话(执行前看清风险) |
| SQL 采集与回放 | ytop -f sql_collect.sh |
JDBC 采集 gv$sql 报告、HTZ 回放(目标需 Java) |
| SQLMAP | ytop -E 内 \sqlmap 或相关脚本 |
绑定 SQL 映射与改写(YashanDB) |
| 主机 IO / CPU | ytop -f iostat.sh、pidstat.py |
数据库主机资源快照 |
| 跟踪与火焰图 | ytop -f perf_flamegraph.sh |
perf / bpftrace 类排障 |
| YashanDB 集群/备份 | ytop -f yasboot_process.py |
进程状态、yasrman 备份管理等 |
-f 还支持在目标机编译运行 C、解释运行 Python,以及 -m 按秒输出指标差分。脚本检索:ytop -S 'lock'。
会话统计子命令
ytop stat -S 40,50 -n "CPU%,parse%"
ytop event -e "db file%"
面向 gv$sesstat / gv$session_event 视图族(YashanDB 体系),按 SID 或 TOP N 做间隔采样。
SSH 与配置
ytop ssh -t host -u user -p pass:一次性配置免密(等价 ssh-copy-id 流程)ytop -c config.ini:多环境连接集中管理
两种「进库壳」:-e 与 -E
很多人把这两个 flag 混在一起;它们互斥,用途不同:
ytop -e(--enter) |
ytop -E(--jdbc-enter) |
|
|---|---|---|
| 本质 | 在 PTY 里启动真实 DB 客户端(yasql / sqlplus / mysql / psql …) | 控制端本机 JDBC 交互壳(yjdbc),sqlplus 常用子集 |
| 连接路径 | 本机 Unix,或 SSH 到库主机 再起客户端 | 仅控制端直连 JDBC 端口,不走 SSH、不上传 yasql |
| 典型场景 | 习惯原生客户端、要用客户端专有命令 | 本机没装 yasql、要 DEFINE/@ 批处理、SQLMAP(\sqlmap) |
与 -f |
互斥 | 允许 ytop -E -f script.sql(仅 .sql,经 JDBC 执行) |
| 平台 | Unix 本机/SSH;Windows 不支持 -e |
控制端有 Java 即可 |
| 默认连接 | 跟 -d、-C、--login-cmd 走 |
仅 -E 时可省略参数:本机出口 IP、端口 1688、用户 sys 等 lab 默认;生产务必显式 -t -P -u -p |
ytop -t 10.10.10.x -u yashan -e
ytop -E -t 10.10.10.x -P 1688 -u sys -p '***'
ytop -E -f we.sql -t 10.10.10.x -P 1688 -u sys -p '***'
-E 与 -e、-q、-r、--copy、-S、-m 不能同开;变量替换用 --define(仅 -E)。
几种工作方式怎么选
- YashanDB 长时间盯盘 → 默认
ytop - 任何支持的库:跑清单里的诊断 →
ytop [-d …] -f script.sql或-q "..." - 要在真 sqlplus/yasql 里手工敲 →
ytop -e(或 SSH 远程-t … -e) - 本机 JDBC、批处理、SQLMAP →
ytop -E(可选-f) - 不知道跑哪个脚本 →
ytop -S '关键字' - 主机层 IO/网络/跟踪 →
ytop -t dbhost -f iostat.sh等 OS 脚本
周期性采样:在命令后加间隔秒数与次数,例如 ytop -f we.sql 5 10。
能力边界(它不是什么)
- 不是 图形化运维台、告警中心、自动巡检调度器
- 不是 数据库安装/升级工具(
yasboot相关脚本只是查看/辅助,不负责装库) - 监控模式当前仅 YashanDB;其它库用脚本模式与子命令
-E面向 YashanDB JDBC;-e才按-d进各库原生 CLI- 高危脚本(杀会话、flush cache、删归档等)不会替你二次确认
- OS 脚本在目标机执行,生产环境先看清脚本用途与副作用
常见坑
-e与-E选错:远程主机上有 yasql 用-e;控制端纯 JDBC、要@脚本或 SQLMAP 用-E。- 非 YashanDB 跑默认监控:会报错退出;改
-f/-q/-e。 - 连不上就停:检查客户端是否在 PATH、
-C/--login-cmd、SSH 用户权限。 - 集群:
-I选实例(0为全部);脚本可能有we/we_single等变体。 - 版本:
-V参与脚本名解析(如we_23.5);-E不自动探测版本,需显式-V。 - Windows:
-e不可用;SQL Server 场景注意sqlcmd与.ps1脚本的平台限制。


ytop 系列:认识 ytop——终端里的多库运维工具箱:等您坐沙发呢!