老虎刘老师的ora工具想必很多Oracle DBA都非常熟悉,堪称数据库运维的利器。受到启发,我也尝试利用Go语言,为YashanDB打造一款属于它自己的运维工具箱,暂时取名为 yat。目前它还处于非常早期的阶段,只实现了两个核心功能,所以源代码暂时不公开了。我打算利用业余时间,像搭积木一样,逐步为它添加更多DBA日常所需的功能。这篇文章,就带大家抢先体验一下 yat 的初代模样。
yat 基本用法
安装后,直接执行 ./yat 即可看到当前版本支持的所有命令和简要说明:
[yashan@yashandb1 scripts]$ ./yat
Usage:
yat table <table_name> Show table details
yat awr Generate AWR report
yat version Show version info
[yashan@yashandb1 scripts]$ ./yat version
YashanDB Tool (yat) v1.0 for YashanDB v23.4
从帮助信息可以看出,当前版本主要提供了查看表详情、生成AWR报告和查看自身版本三个功能。
打印 yat 版本信息
查看工具版本是最简单的操作,可以快速确认工具与数据库版本的适配情况。
[yashan@yashandb1 scripts]$ ./yat version
YashanDB Tool (yat) v1.0 for YashanDB v23.4
打印表详细信息
yat table 命令是日常诊断中查看表元数据的利器。目前它会打印出三部分关键信息,结构清晰:
- 表基本信息:包括表名、所属表空间、大小、行数、块数以及最后分析时间。
- 表列信息:展示每一列的列名、唯一值数量(NDV)、是否允许为空、空值数量、数据类型、高低值以及直方图信息。
- 索引信息:列出表上的所有索引,包括索引名、类型以及构成索引的列。
下面是一个查看表 t1 的完整示例。当存在多个同名表(不同属主)时,工具会贴心地提供交互式选择:
[yashan@yashandb1 scripts]$ ./yat table t1
============================================================
YashanDB Table Info: T1
============================================================
Multiple owners found, please select:
[1] BENCHMARK
[2] BENCHMARK2
Enter selection (default 1):
Target: BENCHMARK.T1
Table Basic Info:
TABLE_NAME TABLESPACE_NAME TOTAL_MB NUM_ROWS BLOCKS LAST_ANALYZED
------------------------- --------------- ----------- --------------------- --------------------- --------------------
T1 USERS .0625 3 8 2026-03-29 14:24:39
Table Columns info:
COLUMN_NAME NDV NUL NUM_NULLS DATA_TYPE LOW_VAL_25 HIGH_VAL_25 LAST_ANALYZED HISTOGRAM
------------------------- ---------- --- ---------- ------------------ ------------------------- ------------------------- -------------------- ----------
ID 3 N 0 INTEGER 01000000 04000000 2026-03-29 14:24:39 FREQUENCE
NAME 3 Y 0 VARCHAR(10) a d 2026-03-29 14:24:39 FREQUENCE
Table Index info:
INDEX_NAME INDEX_TYPE COLUMNS
------------------------------ --------------- ------------------------------------------------------------
UK_T1 UNIQUE ID,NAME
SYS_C_32 PRIMARY ID
IDX_T1_NAME NORMAL NAME
Analysis Finished.
这个输出对于快速了解表结构、数据分布和索引设计非常有帮助,尤其是在进行SQL优化或排查问题时。
生成 AWR 性能报告
AWR(Automatic Workload Repository)报告是进行数据库性能分析的重量级工具。yat awr 命令简化了报告生成流程。默认情况下,它会先列出最近7天的所有快照及其DB Time信息,然后引导用户选择起止快照ID来生成报告。
[yashan@yashandb1 scripts]$ ./yat awr
============================================================
YashanDB AWR Report Generator
============================================================
[1/3] Fetching snapshots last 7 days...
SNAP_ID BEGIN_TIME END_TIME DB TIME (MINS)
----------- -------------------- -------------------- --------------
1 2026-03-23 10:14:46 2026-03-23 10:15:00
2 2026-03-23 10:15:00 2026-03-23 11:15:01 .01
3 2026-03-23 11:15:01 2026-03-23 11:40:58 -.32
...
157 2026-03-29 17:26:35 2026-03-29 18:26:36 1.44
Enter BEGIN Snapshot ID: 156
Enter END Snapshot ID: 157
[2/3] Generating AWR report...
[3/3] Success! Report created: awr_1495968044_1_156_157.html
命令执行成功后,会在当前目录生成一个HTML格式的AWR报告文件(如 awr_1495968044_1_156_157.html),用浏览器打开即可进行详细的性能分析。
以上就是 yat 工具第一个版本的初步体验。它由 Go 语言编写,目前实现了两个DBA高频使用的核心功能,旨在提升YashanDB的运维效率。项目还在萌芽期,未来会加入更多实用的模块。
Enjoy it!
- 声明 -
本文系个人实践的技术总结,难免有考虑不周全的地方~ 如果您发现错误、有更优解法,或者有相关疑问,欢迎在云栈社区等技术论坛留言讨论,一起交流学习、共同进步!