【问题标题】:What is stored in the JNDI cache?JNDI 缓存中存储了什么?
【发布时间】:2009-07-22 13:38:34
【问题描述】:

我们在 Windows 上使用 WebSphere 6.1 连接到不同 Windows 机器上的 DB2 数据库。我们在应用程序中使用准备好的语句。在调整数据库索引(在索引的末尾添加一列)时,我们没有看到我们在具有相同查询的测试数据库上看到的性能提升,在更改索引后,数据库服务器上的处理器实际上是挂钩的。

准备好的语句查询计划是否实际存储在 JNDI 中?如果是这样,如何清除它们?如果没有,我们如何清除 DB2 服务器上的缓存?

【问题讨论】:

  • 您可以通过 websphere 中的连接池设置来控制语句缓存的大小。 jdbc 驱动程序本身也可能支持准备好的语句缓存。

标签: java db2 websphere jndi


【解决方案1】:

准备好的语句的执行计划存储在 DB2 包缓存中。添加索引后,包缓存可能仍保留旧的访问计划,这些计划现在不是最佳的。

添加索引后,您需要至少对该索引发出 RUNSTATS 语句,以便为 DB2 优化器提供选择合理访问计划所需的信息。

一旦新索引的 RUNSTATS 统计信息存在,发出 FLUSH PACKAGE CACHE 语句以释放涉及受影响表的任何访问计划。这样做的缺点是其他动态 SQL 语句的访问计划也将被弹出,导致优化器使用量暂时增加,因为每个不同的 SQL 语句都被优化和缓存。

http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0007117.html

【讨论】:

    【解决方案2】:

    查询计划“通常”由 RDBMS 本身保存在数据库中,我猜确切的生命周期是特定于供应商的。它们绝对不会保存在 JNDI 注册表中。

    1. 我假设两个数据库中的数据量相似?

    2. 如果是,您是否查看了两个数据库的解释计划并确认它们匹配?

    如果这两个问题的答案都是肯定的,那我就没有主意了,是时候重新启动数据库服务器了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多