SQL语句监控

MYSQL数据库
  • 通过配置文件开启
    在my.cnf文件中的[mysqld]下面添加log=d:/mysql.log新版本中log参数已弃用,然后重启MYSQL服务
    在my.cnf文件中的[mysqld]下面添加general_log=ONgeneral_log_file=C:/mysql.log两行,重启即可
  • 通过SQL语句开启
    执行两条SQL语句set GLOBAL general_log=onset global log_output='table',然后数据库执行的SQL语句即会保存在MYSQL库中的generallog表中
    所以我们只要通过SQL语句开启执行记录,然后查询general
    log表的内容就可以了
public static void main(String[] args) {  
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String url = "jdbc:mysql://localhost:3306/mysql";
        String username = "root";
        String password = "";
        Connection con = null;
        try {
            con = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            System.out.println("数据库连接失败!");
            e.printStackTrace();
        }
        // 先开启SQL语句监控
        String start1 = "set global general_log=on";
        String start2 = "set GLOBAL log_output='table'";

        String lastTime = "2017-02-04 01:21:47";//通过时间筛选执行的SQL记录
        String sql = "select event_time,command_type,argument from general_log where event_time>'" + lastTime + "'";
        try {
            Statement stmt = con.createStatement();
            stmt.execute(start1);//开启MYSQL的SQL执行记录
            stmt.execute(start2);

            ResultSet set = stmt.executeQuery(sql);//查询执行的SQL语句
            while (set.next()) {
                System.out.println("时间:" + set.getTimestamp(1) + "  类型:" + set.getString(2) + "  语句:" + set.getString(3));
            }
            // stmt.execute(stop);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
SQL Server数据库

SQL Server数据库自带了一个性能分析工具 SQL Server Profiler

zhutougg

继续阅读此作者的更多文章