更新时间:2025-05-29 GMT+08:00
监控数据库连接
连接监控功能支持监控JDBC端以下指标:应用开启连接的次数、关闭连接的次数、连接异常断开的次数、数据库访问量、客户端机器CPU的使用率、内存的使用率、上下行传输速率、应用端到数据库链路之间的网络时延、抖动、丢包率。此示例将演示如何使用JDBC驱动的连接监控功能。
代码运行的前提条件:根据实际情况添加gaussdbjdbc.jar包(例如用户使用IDE执行代码,则需要在本地IDE添加gaussdbjdbc.jar包)。
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
// $ip、$port、database需要用户自行修改。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBMonitorTest {
public static void main(String[] args){
String driver = "com.huawei.gaussdb.jdbc.Driver";
String username = System.getenv("EXAMPLE_USERNAME_ENV");
String passwd = System.getenv("EXAMPLE_PASSWORD_ENV");
String sourceURL
= "jdbc:gaussdb://$ip:$port/database?dbMonitor=true&loggerLevel=debug&loggerFile=dbMonitor.log";
try {
// 加载数据库驱动。
Class.forName(driver).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
Connection conn = null;
Statement statement = null;
try {
//以非加密方式连接数据库。
conn = DriverManager.getConnection(sourceURL, username, passwd);
System.out.println("Connection succeed!");
// 创建表。
statement = conn.createStatement();
String createTableQuery = "CREATE TABLE IF NOT EXISTS mytable (id INT PRIMARY KEY, name VARCHAR(50))";
statement.executeUpdate(createTableQuery);
// 插入数据。
String insertQuery = "INSERT INTO mytable (id, name) VALUES (1, 'John')";
statement.executeUpdate(insertQuery);
// 查询数据。
String selectQuery = "SELECT * FROM mytable ";
ResultSet resultSet = statement.executeQuery(selectQuery);
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id: " + id + ", name: " + name);
}
// 删除表。
String dropTableQuery = "DROP TABLE IF EXISTS mytable";
statement.executeUpdate(dropTableQuery);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
上述示例的运行结果为:
Connection succeed! id: 1, name: John
在日志文件dbMonitor.log中可以看到输出的连接监控信息,具体包括:
Nov 23, 2023 10:30:54 AM com.huawei.gaussdb.jdbc.qos.DataProcess saveQosResult
FINE: {
"Destination host:port" : "ip:port",--服务器的IP和端口。
"Delay" : "1.00 ms",--网络时延。
"Jitter" : "0.04ms",--网络抖动。
"Loss" : "0%",--网络丢包率。
"DownloadSpeed" : "0.395Mbps",--网络下行速率。
"UpLoadSpeed" : "0.498Mbps"--网络上行速率。
}
Nov 23, 2023 10:30:56 AM com.huawei.gaussdb.jdbc.CollectDBData$CollectDBThread run
FINE: {
"openCount": "1",--应用开启数据库连接的次数。
"closeCount": "1",--应用关闭数据库连接的次数。
"abortedCount": "0",--连接异常断开的次数。
"visitCount": "12",--应用对数据库的访问量。
"cpuUsage": "20.39%",--客户端机器CPU的使用率。
"memoryUsage": "98.32%"--客户端机器内存的使用率。
}
父主题: 典型应用开发示例