【发布时间】: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.sqlserver mssql-jdbc 7.4.1.jre8 -
嗨@Rick Bonnett,我已经更新了我的答案。如果您需要更多信息,请告诉我。 :)
标签: java sql-server jdbc azure-sql-database mssql-jdbc