在DB2上并发运行查询数时出现异常

时间:2009-01-16 06:21:28

标签: db2

我们正在测试特定于应用程序的设计,我们需要在同时触发多个查询后显示渐进计数。

当我们触发单个查询时,我们成功地能够异步获取结果。

但是,当我们同时发出3-4个查询时,经过大量的时间和在为每个查询获取一些记录之后 我们得到了一个例外情况

“com.ibm.db2.jcc.c.SqlException:DB2 SQL错误:SQLCODE:-1218,SQLSTATE:57011,SQLERRMC:4099”

因此,所有触发的查询都不会被完全执行。

如果逐个触发这些查询,则没有问题。 (query2在query1完成后开始执行等等)

在控制中心查找此SQLCODE后,我们发现了

的详细信息

SQL1218N缓冲池中当前没有可用的页面

  "<buffpool-num>".

说明:

当前正在使用缓冲池中的所有页面。一个要求 使用另一个页面失败。

如果再次执行,该声明可能会成功。如果发生此错误 通常,以下部分或全部操作可能会进一步阻止 失败:

  1. 增加缓冲池大小

  2. 减少数据库代理和/或连接的最大数量

  3. 降低最大并行度

  4. 减少此

    中的表空间的预取大小

    缓冲池

  5. 将一些表空间移动到其他缓冲池中。

    sqlcode:-1218

    sqlstate:57011


  6. 在我们的数据库实例上,我们已经有一个32K页面大小的缓冲池&amp;甚至在创建另一个缓冲池之后 32K,问题仍然存在。

    任何人都可以帮助我们解决问题。

    谢谢&amp;的问候,

    Ravindra Jain

3 个答案:

答案 0 :(得分:1)

缓冲池的页面大小必须与它关联的表空间的页面大小相匹配。您的所有表空间都使用32K页吗?您应该检查是否有不同的缓冲池用完了页面。 10,000页应该足以避免您看到的错误。

答案 1 :(得分:0)

最可能的原因是您的事务没有发出“提交”,因此缓冲池中存在未建立的数据。

对于当前硬件来说,32K似乎非常小(因为DB2可以处理几兆字节的CLOB和BLOB)32MB或更多将更适合缓冲池大小。

答案 2 :(得分:0)

我们在插入/更新每条记录后提交。 因此,重做日志不是问题。 (缓冲池永远不会被过度泛滥)。

32K是缓冲池的页面大小&amp;缓冲池包含10000页。 那么,这些配置是否适合缓冲池?