实现数据库监控功能
定时任务
每天跑两次 上班时间 下班时间
表 实体
public class DatabaseMonitor {
private String id;
// 类型 0:磁盘监控 1:数据库监控
private Integer type;
// ip地址
private String ip;
// 磁盘监控时为盘符路径,数据库监控时为表空间名称
private String subject;
// 空间大小
private String totalSize;
// 使用大小
private String usedSize;
// 剩余大小
private String availSize;
// 使用率
private String usageRate;
// 最大表空间 数据库监控使用的字段
private String maxSize;
// 检测时间
private Date gmtCreate;
}
查询表空间使用大小sql
SELECT df.tablespace_name AS "tableSpaceName",
df.totalspace AS "total",
(df.totalspace - tu.totalusedspace) AS "avail",
tu.totalusedspace AS "used",
df.maxsize AS "max"
FROM (SELECT tablespace_name,
ROUND(SUM(bytes) / 1048576) TotalSpace,
ROUND(SUM(GREATEST(bytes, maxbytes)) / 1048576) MaxSize
FROM dba_data_files
GROUP BY tablespace_name) df,
(SELECT ROUND(SUM(bytes) / 1048576) totalusedspace,
tablespace_name
FROM dba_segments
GROUP BY tablespace_name) tu
WHERE df.tablespace_name = tu.tablespace_name;
//定时任务
//查询表空间使用
List<PageData> tableSpace = DatabaseMonitorMapper.getTableSpace();
Date date = new Date();
List<DatabaseMonitor> listDatabase = new ArrayList<>();
DatabaseMonitor ddm;
for (PageData pageData : tableSpace) {
ddm = new DatabaseMonitor();
ddm.setId(UUIDGenerator.getUUID());
ddm.setType(1);
ddm.setIp(databaseIp);
ddm.setGmtCreate(date);
ddm.setSubject(pageData.getString("tableSpaceName"));
String total = mbConvertGb(objectConvertInt(pageData.get("total")));
ddm.setTotalSize(total);
String used = mbConvertGb(objectConvertInt(pageData.get("used")));
ddm.setUsedSize(used);
String avail = mbConvertGb(objectConvertInt(pageData.get("avail")));
ddm.setAvailSize(avail);
String usageRate = String.format("%.2f%%", (objectConvertInt(pageData.get("used")) / (double) objectConvertInt(pageData.get("total"))) * 100);
ddm.setUsageRate(usageRate);
String max = mbConvertGb(objectConvertInt(pageData.get("max")));
ddm.setMaxSize(max);
listDatabase.add(ddm);
}
// 入库