gpt4 book ai didi

java - JDBC mysql 连接在 Win8 上比 Ubuntu14 慢得多

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:18 25 4
gpt4 key购买 nike

我需要一些关于优化 mysql 连接/查询的帮助。老实说,我对数据库主题还很陌生,因此我不知道如何开始优化过程以及如何解释我的 linux 和 windows 机器之间的性能差异。

我有一个连接到数据库的 java 应用程序,检索一些数据(大约 1 000 000 行),处理它们并写出到一组 csv 文件。我遇到的问题是,在我的 linux 机器(i5-2520M 和 SSD)上,整个过程大约需要 17 秒,而在我的 Windows 8 计算机(i7-4790k,SSD 磁盘与 7200 rpm HDD 相结合)上,执行几乎需要一分钟相同的代码。

因此它在 win 上的运行时间是 linux 的 3 倍多。 谁能解释为什么会这样以及如何使两个平台上的性能具有可比性?

更新 1:

我猜 JVM 是一个热点版本 8。

数据库在本地主机上。

核心:Windows 为 4x4,5 ghz,Linux 为 2x2,5 ghz,两者均采用英特尔超线程技术

在 linux 或 windows 上都没有捕获到任何异常,即使我已经为它们准备了一个 try/catch。


这里有一些关于应用程序性能和关键组件的基本数据。如有必要,我可以提供更多详细信息,请告诉我您需要什么。

    public class DBAccesor {
private Connection mySQLconnection;
private ResultSet answerDB;
private Statement query;
private final String connectionFlags = "&characterEncoding=utf8&useUnicode=true&useSSL=false"
private String queryBody = "SELECT name, surename FROM table1 INNER JOIN table2 ON table1.person_id = table2.person_id WHERE origin = \"eu\"";
...
  1. 连接建立于:Win 0.167s vs Linux 0.311s

    Class.forName(driverJDBC);
    DriverManager.setLogWriter(new PrintWriter(System.out));
    mySQLconnection = DriverManager.getConnection(
    DBServer
    + DBName
    + login
    + password
    + connectionFlags);
  2. 查询执行:Win 0.023 秒,Linux 0.01 秒

    query = mySQLconnection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    query.setFetchSize(Integer.MIN_VALUE);
    answerDB = query.executeQuery(queryBody);
  3. 从结果集中检索数据:Win 53.020s vs Linux 13.282s

    ArrayList<Person> results = new ArrayList<Person>();
    while (answerDB.next()) {
    try {
    String name = new String (answerDB.getBytes(1), "UTF-8"); //since
    //there is a lot of local characters in my data I have to use
    //getBytes instead of getString. otherwise obtained characters are
    //corrupted.
    String surname = new String (answerDB.getBytes(2), "UTF-8");
    results.add (new Person(name, surename));
    } catch (SQLException | UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    }

其余代码非常简单。我有一些 paralelStream 处理基于刚刚创建的 Arraylist 并将输出写入文件。

  1. 数据处理:Win 1.109s vs Linux 2.976s
  2. 将输出写入文件:Win 1.571s vs Linux 0.439s

整体运行时间:Win 55.880s vs Linux 17.083s

最佳答案

您要做的是从 MySQL 数据库中检索数据并将这些数据写入您的磁盘。现在的问题是,这与您使用的操作系统无关。查看您的两台机器的配置,我看到您在 Linux 机器上使用 SSD,在 Windows 机器上使用 HDD。您应该知道,SSD 磁盘的读/写能力比 HDD 好得多、快得多,所以我认为这就是性能差异的来源。

我建议您阅读此讨论主题以获取更多信息: https://dba.stackexchange.com/questions/59828/ssd-vs-hdd-for-databases

关于java - JDBC mysql 连接在 Win8 上比 Ubuntu14 慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34481671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com