0

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

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

4

2 回答 2

2

准备好的语句的执行计划存储在 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

于 2009-07-23T00:15:03.180 回答
0

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

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

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

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

于 2009-07-22T14:01:45.540 回答