# sqlserver-monitor **Repository Path**: TimengHero/sqlserver-monitor ## Basic Information - **Project Name**: sqlserver-monitor - **Description**: 极简版可视化的SQLServer数据库监控系统 - **Primary Language**: Java - **License**: MIT-0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 下面是一份**适合你当前项目的 README 文档示例**,内容覆盖了**项目定位、技术栈、运行方式、配置说明、常见问题(TLS/SQL 报错)**等,可直接放到仓库根目录使用。 --- # SQL Server 监控平台(Spring Boot + Thymeleaf) > 基于 **Spring Boot 2.7 + SQL Server 2012** > 用于 **慢 SQL 监控 / 阻塞(锁表)监控 / 可视化报表** --- ## 一、项目简介 本项目是一个**轻量级 SQL Server 性能监控工具**,主要用于: - ✅ 实时监控 SQL Server **阻塞(Blocking / 锁表)** - ✅ 采集并分析 **慢 SQL** - ✅ 通过 **Thymeleaf 页面可视化展示** - ✅ 适合 **生产环境内网使用** 适用于: - SQL Server 2012 / 2014 / 2016+ - 运维 / DBA / 后端日常排查 --- ## 二、技术栈 | 组件 | 版本 | | ----------- | ------------------------ | | Spring Boot | 2.7.18 | | JDK | 8(推荐 BellSoft JDK 8u462) | | SQL Server | 2012+ | | JDBC Driver | mssql-jdbc 12.8.1.jre8 | | 连接池 | HikariCP | | 视图层 | Thymeleaf | | 定时任务 | Spring Scheduler | --- ## 三、功能说明 ### 1️⃣ 阻塞监控(Blocking) - 定时采集: - `sys.dm_exec_requests` - `sys.dm_tran_locks` - 记录: - 阻塞 SPID - 被阻塞 SPID - 等待类型 / 等待资源 - 等待时间 📄 表:`monitor_blocking_snapshot` --- ### 2️⃣ 慢 SQL 监控 - 定时采集执行时间 > 阈值 的 SQL - 统计: - 执行次数 - 平均耗时 - SQL 文本 📄 表:`monitor_slow_sql_snapshot` --- ### 3️⃣ 可视化页面 | 页面 | 地址 | | -------- | ------------ | | 仪表盘 | `/dashboard` | | 阻塞明细 | `/blocking` | | 慢 SQL 明细 | `/slowsql` | --- ## 四、快速启动 ### 1️⃣ 克隆项目 ```bash git clone https://your-repo/sqlserver-monitor.git cd sqlserver-monitor ``` --- ### 2️⃣ 初始化数据库 在目标 SQL Server 中执行: ```sql CREATE TABLE monitor_blocking_snapshot ( id BIGINT IDENTITY PRIMARY KEY, capture_time DATETIME NOT NULL DEFAULT GETDATE(), blocked_spid INT, blocking_spid INT, wait_type NVARCHAR(60), wait_time INT, wait_resource NVARCHAR(255), sql_text NVARCHAR(MAX) ); CREATE TABLE monitor_slow_sql_snapshot ( id BIGINT IDENTITY PRIMARY KEY, capture_time DATETIME NOT NULL DEFAULT GETDATE(), session_id INT, elapsed_ms BIGINT, cpu_ms BIGINT, logical_reads BIGINT, sql_text NVARCHAR(MAX) ); CREATE TABLE monitor_connect_snapshot ( id NVARCHAR(20) PRIMARY KEY, capture_time DATETIME NOT NULL, db_name NVARCHAR(30), login_name NVARCHAR(60), host_name NVARCHAR(60), host_ip NVARCHAR(32), program_name NVARCHAR(255), status NVARCHAR(16), con_count INT ); ``` --- ### 3️⃣ 配置数据源 编辑: ``` src/main/resources/application-dev.yml ``` 示例: ```yaml spring: datasource: url: jdbc:p6spy:sqlserver://127.0.0.1;DatabaseName=master;encrypt=true;trustServerCertificate=true username: sa password: YourPassword driver-class-name: com.p6spy.engine.spy.P6SpyDriver ``` ⚠️ **SQL Server 2012 必须使用 `encrypt=false`** --- ### 4️⃣ 启动项目 #### IDEA - 右键 `MonitorApplication.java` - Run / Debug #### Maven ```bash mvn spring-boot:run ``` --- ### 5️⃣ 访问页面 ``` http://localhost:8080/dashboard ``` --- ## 五、定时任务说明 | Job | 频率 | 作用 | | ------------------ | ------ | ------- | | BlockingMonitorJob | 每分钟 | 采集阻塞 | | SlowSqlMonitorJob | 每 5 分钟 | 采集慢 SQL | 可通过 `SchedulerConfig` 调整线程池大小。 --- ## 六、常见问题(FAQ) ### ❓ 启动时报 TLS / SSL 错误? ✅ **原因** - SQL Server 2012 默认 TLS 1.0 - JDBC 驱动默认拒绝弱加密 ✅ **解决方案** ```yaml encrypt=false ``` --- ### ❓ 页面报错:Template not found? ✅ 确认以下文件存在: ``` src/main/resources/templates/dashboard.html src/main/resources/templates/blocking.html src/main/resources/templates/slowsql.html ``` --- ### ❓ SQL Server 2012 能用吗? ✅ 可以用 ⚠️ 建议: - 内网环境 - 不开启 SSL - 后期升级到 SQL Server 2016+ --- ## 七、后续可扩展方向 - ✅ 钉钉 / 企业微信告警 - ✅ ECharts 图表(阻塞趋势 / Top SQL) - ✅ 时间范围筛选 - ✅ Excel 导出 - ✅ Docker 化部署 --- ## 八、作者 / 维护 - 项目维护者:jszhao - 技术栈:Java / SQL Server / Spring Boot - 适用场景:生产环境 SQL Server 性能监控 ---