云数据库 GAUSSDB-示例:常用操作:示例4 数据库连接监控功能使用示例

时间:2024-11-13 14:46:49

示例4 数据库连接监控功能使用示例

此示例将演示如何使用JDBC驱动的连接监控功能。

// 以下用例以gaussdbjdbc.jar为例。
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。
// 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
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);

            // 创建表。
            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);
        }
    }
}

在日志文件dbMonitor.log中可以看到输出的连接监控信息,具体包括:

Nov 23, 2023 10:30:54 AM com.huawei.gaussdb.jdbc.qos.DataProcess saveQosResult
FINE: {
   "Destination host:port" : "localhost:8000",--服务器的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 saveCollectResult
FINE: {
   "openCount": "1",--应用开启数据库连接的次数。
   "closeCount": "1",--应用关闭数据库连接的次数。
   "abortedCount": "0",--连接异常断开的次数。
   "visitCount": "12",--应用对数据库的访问量。
   "cpuUsage": "20.39%",--客户端机器CPU的使用率。
   "memoryUsage": "98.32%"--客户端机器内存的使用率。
}
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0066.html