我们在 Windows 上使用 WebSphere 6.1 连接到不同 Windows 机器上的 DB2 数据库。我们在应用程序中使用准备好的语句。在调整数据库索引(在索引末尾添加一列)时,我们没有看到我们在具有相同查询的测试数据库上看到的性能提升,在更改索引后,数据库服务器上的处理器实际上是挂钩的。
准备好的语句查询计划是否实际存储在 JNDI 中?如果是这样,如何清除它们?如果没有,我们如何清除 DB2 服务器上的缓存?
准备好的语句的执行计划存储在 DB2 包缓存中。添加索引后,包缓存可能仍保留现在次优的旧访问计划。
添加索引后,您将希望至少对该索引发出 RUNSTATS 语句,以便为 DB2 优化器提供选择合理访问计划所需的信息。
一旦新索引的 RUNSTATS 统计信息存在,发出 FLUSH PACKAGE CACHE 语句以释放涉及受影响表的任何访问计划。这样做的缺点是其他动态 SQL 语句的访问计划也将被弹出,导致优化器使用量暂时增加,因为每个不同的 SQL 语句都被优化和缓存。
查询计划“通常”由 RDBMS 本身保存在数据库中,我猜确切的生命周期是特定于供应商的。它们绝对没有保存在 JNDI 注册表中。
我假设两个数据库中的数据量相似?
如果是这样,您是否查看了两个数据库的解释计划并确认它们匹配?
如果这两个问题的答案都是肯定的,那我就没有主意了,是时候重新启动数据库服务器了。