【问题标题】:ResultSet .getString() very slow for large string against Azure SQLResultSet .getString() 对于 Azure SQL 的大字符串非常慢
【发布时间】:2021-08-04 20:14:00
【问题描述】:

我正在使用 Microsoft SQL Server JDBC 驱动程序从 Azure SQL 数据库查询数据。我正在使用 ResultSet .getString 从我的一个表中提取一个大的 JSON 字符串,并且该方法的性能 - 对于同一条记录 - 遍布地图。从 1 秒到超过 1 分钟或更长时间。

我获取的 JSON 大小约为 10 - 15 Mb,所以我怀疑这与它有很大关系。我只是对性能的极端波动感到困惑。您认为这可能是 Java 堆空间/GC 问题吗?或者它可能与 getString 方法的实际工作方式有关?

我的实际查询性能一直很好,从服务器获取这个大数据库的多行不到 1 秒。

代码sn-p:

ResultSet rs = pstmt.executeQuery();
if (azureLogging) {
    System.out.println("Azure log: GetCustomerTariffs:" + new Date().toString() + " : query finished");
}
tariffs = new ArrayList<CustomerTariff>();

while (rs.next()) {
    System.out.println("Azure log: GetCustomerTariffs:" + new Date().toString() + " : getting JSON");

    jsonStr = rs.getString("tariff_json");
    System.out.println("Azure log: GetCustomerTariffs:" + new Date().toString() + " : got JSON");
    System.out.println(rs.getString("company_no") + ", " + rs.getString("scac"));
    System.out.println("Azure log: GetCustomerTariffs:" + new Date().toString() + " : deserializing JSON");
    CustomerTariff tariff =  respGson.fromJson(jsonStr, CustomerTariff.class);
    System.out.println("Azure log: GetCustomerTariffs:" + new Date().toString() + " : JSON deserialized");

    tariffs.add(tariff);
}

【问题讨论】:

  • 人们可能需要更多信息来帮助您:例如您使用的是哪个 JDBC 驱动程序;您运行的查询;您的表/索引定义。另外,你是如何测量来确定花费最多时间的?是特定的 getString() 调用还是所有 getString() 调用?
  • com.microsoft.sqlservermssql-jdbc7​​.4.1.jre8
  • 嗨@Rick Bonnett,我已经更新了我的答案。如果您需要更多信息,请告诉我。 :)

标签: java sql-server jdbc azure-sql-database mssql-jdbc


【解决方案1】:

更新:
参数嗅探可能会导致查询慢,关注这个article,我们可以找到并解决参数嗅探。


  1. 我认为您应该首先使用Query Performance Insight for Azure SQL Database 来查看工作负载中最消耗资源和长时间运行的查询。你可以dynamically scale database resources with minimal downtime

  2. 我们还可以在我们的 jdbc 应用程序中使用连接池来降低打开新连接的成本并有效地管理资源。 Improve JDBC application reliability with Azure SQL and connection pooling.

【讨论】:

  • 谢谢约瑟夫。我没有看到查询性能本身存在问题 - 这似乎相当不错。我的问题出在 ResultSet.getString() 调用以在我的查询执行完成后获取我的大型 JSON 字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多