【问题标题】:Exception while running number of queries concurrently on DB2在 DB2 上同时运行多个查询时出现异常
【发布时间】:2009-01-16 06:21:27
【问题描述】:

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

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

但是,当我们同时触发 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


在我们的数据库实例上,我们已经有一个 32K 页大小的缓冲池,甚至在创建另一个缓冲池之后也是如此 32K,问题仍然存在。

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

感谢和问候,

拉文德拉耆那教

【问题讨论】:

    标签: db2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        我们在每条记录被插入/更新后提交。 所以,重做日志不是问题。 (缓冲池永远不会溢出)。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          相关资源
          最近更新 更多