【问题标题】:fetchSize property on a DB2 database (JDBC)DB2 数据库 (JDBC) 上的 fetchSize 属性
【发布时间】:2022-01-11 11:19:17
【问题描述】:

我正在研究如何在具有数百万行的 DB2 数据库上提高选择查询的性能。不幸的是,我还没有访问权限,无法对其进行测试。
因此,我尝试通读文档,并且有一个使我感到困惑的声明。该声明以粗体和斜体表示the fetchSize property does not affect Statement objects that exist when fetchSize is set.

据我所知,我必须创建一个 Statement 对象才能设置 fetchSize 属性,这就是我在程序代码中看到和执行的方式。
此外,该声明在某种程度上与其前一句相矛盾,即可以使用Statement.setFetchSize method 设置获取大小。

谁能澄清或分享他/她在 JDBC/fetchSize/DB2 方面的经验?

在 IBM 的文档中(参见 link):

fetchSize

指定 ResultSet 对象的默认提取大小 由 Statement 对象生成。此属性的数据类型 是整数。

fetchSize 默认值可以被 Statement.setFetchSize 方法。 fetchSize 属性不影响设置 fetchSize 时存在的 Statement 对象。

fetchSize 的可能值有:

0 或正整数

新创建的默认 fetchSize 值 语句对象。如果 fetchSize 属性值无效,IBM 用于 JDBC 和 SQLJ 的数据服务器驱动程序设置默认的 fetchSize 值 为 0。

DB2BaseDataSource.FETCHSIZE_NOT_SET (-1)

表示 Statement 对象的默认 fetchSize 值为 0。 此值是属性默认值。 fetchSize 属性不同于 查询数据大小属性。 fetchSize 影响的行数 返回,并且 queryDataSize 影响的是字节数 返回。

【问题讨论】:

  • 我认为这意味着如果在execute***Statement 调用之后调用它没有效果,但它写得非常糟糕。这意味着它不能用于即时调整提取大小,但您需要预先决定。获取大小是 JDBC 中存在的最烦人的复杂事物之一。文档也是垃圾,它没有解释 0 的提取大小意味着什么。
  • 还可以尝试:queryDataSize:32KB(默认),256KB(最大到 11.5.7),10MB(最大从 11.5.7),queryPrefetch=true(从 11.5.6 开始) .
  • 当您获得对 Db2 的访问权限时(或者甚至通过有用的 DBA 进行间接访问,如果有的话),那么开始优化的地方可能不是获取大小,而是查询的访问计划。

标签: java jdbc db2


【解决方案1】:

这意味着在连接级别设置的fetchSize 值默认用于所有未来的Statement 对象,除非它被Statement.fetchSize() 覆盖。在连接级别更改fetchSize 不会影响之前创建的Statements。

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 2011-01-20
    • 1970-01-01
    • 2016-12-16
    • 2014-07-11
    • 1970-01-01
    • 2014-11-15
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多