首页 > 解决方案 > 许多无用的 SHOW VARIABLES 查询与 mysql-connector-java-5.1.32

问题描述

我正在运行一个 Java 程序,该程序使用休眠中的 jdbc url 连接到 mysql 数据库。

Java 程序对该数据库执行选择,以便将获得的数据插入另一个数据库。

问题是,一旦导出完成,我仍然会收到许多形式的查询: /* mysql-connector-java-5.1.32 ( Revision: jess.balint@oracle.com-20140716155848-mlwabor66widht1n ) */SHOW VARIABLES WHERE Variable_name ='语言(见最后的完整摘要)

这些查询每 2 秒执行一次。

它们会产生新的联系。

因此,一段时间后,服务器因打开的连接而过载。

显然,关闭导出连接不是问题,因为我使用了 try-with-resources 语句,这些语句应该自动关闭已打开的连接。

以下是连接代码的摘要:

public class MySessionProvider implements Provider<SessionFactory> {

  @Config("qlik.export.db") private String database = "mydatabase";
  @Config("qlik.export.url") private String url = "127.0.0.1:3306";
  @Config("qlik.export.user") private String user = "myuser";
  @Config("qlik.export.password") private String password = "mypassword";

  @Override
  public SessionFactory get() {
    final Configuration cf = new Configuration();
    cf.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    cf.setProperty("hibernate.connection.url", String.format("jdbc:mysql://%s/%s", url, database));
    cf.setProperty("hibernate.connection.username", user);
    cf.setProperty("hibernate.connection.password", password);
    cf.setProperty("hibernate.hbm2ddl.auto", "update");
    cf.setProperty("hibernate.dialect.storage_engine", "innodb");
    cf.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL55Dialect");
    cf.setProperty("hibernate.hikari.dataSource.useSSL", "false");
    cf.setProperty("hbm2ddl.auto", "update");
    cf.setProperty("javax.persistence.validation.mode", "none");

以下是无用选择的日志摘要:

2021-04-03T03:00:00.269907Z     183836 Connect  qlik@192.168.1.11 on qlik using TCP/IP
2021-04-03T03:00:00.270146Z     183836 Query    /* mysql-connector-java-5.1.32 ( Revision: jess.balint@oracle.com-20140716155848-mlwabor66widht1n ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'license' OR Variable_name = 'init_connect'
2021-04-03T03:00:00.272279Z     183836 Query    /* mysql-connector-java-5.1.32 ( Revision: jess.balint@oracle.com-20140716155848-mlwabor66widht1n ) */SELECT @@session.auto_increment_increment
2021-04-03T03:00:00.272463Z     183836 Query    SET NAMES utf8mb4
2021-04-03T03:00:00.272557Z     183836 Query    SET character_set_results = NULL
2021-04-03T03:00:00.272641Z     183836 Query    SET autocommit=1
2021-04-03T03:00:00.272736Z     183836 Query    select @@session.tx_read_only

这是导出操作的代码:

public void export() {
    long entityCount = entityCount();
    Log.info("Exporting %s entities of type: %s", entityCount, className().getSimpleName());
    try (final Session qlikSession = sessionProvider.get().openSession()) {
      for (int i = 0; i < entityCount; i += SCROLL_SIZE) {
        List<Object> objects = getObjects(i);
        process(qlikSession, objects);
      }
    } catch (HibernateException e) {
      Log.error("Error while opening session: ", e);
    }
    
  }

标签: javamysqlhibernatejdbc

解决方案


推荐阅读