Amazon QLDB 驱动程序中的常见错误 - 亚马逊 Quantum Ledger 数据库(亚马逊QLDB)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon QLDB 驱动程序中的常见错误

重要

终止支持通知:现有客户可以在2025年7月31日终止支持QLDB之前使用亚马逊。有关更多详细信息,请参阅将亚马逊QLDB账本迁移到亚马逊 Aurora Postgr SQL e。

本节介绍了 Amazon QLDB 驱动程序在与QLDB会话交互时可能引发的运行时错误API。

下面是驱动程序返回的常见异常列表。每个异常都包括特定的错误消息,然后是简短的描述和可能的解决方案建议。

CapacityExceededException

消息:容量已超出

亚马逊QLDB拒绝了该请求,因为它超出了账本的处理能力。QLDB对每个账本强制执行内部缩放限制,以维护服务的运行状况和性能。此限制因每个请求的工作负载大小而异。例如,如果请求执行效率低下的数据事务,例如由非索引限定查询产生的表扫描,则该请求的工作负载可能会增加。

我们建议您在重试请求之前等待。如果您的应用程序一直遇到此异常,请优化您的语句并降低发送到分类账的请求的速率和数量。语句优化的示例包括每个事务运行更少的语句和调优表索引。要了解如何优化语句和避免表扫描,请参阅 优化查询性能

我们还建议使用最新版本的QLDB驱动程序。驱动程序具有默认的重试策略,该策略使用指数回退和抖动来自动重试此类异常。指数回退的原理是对于连续错误响应,重试等待间隔越来越长。

InvalidSessionException

消息:交易 transactionId 已过期

事务已超过其最长生命周期。在提交之前,事务最多可运行 30 秒。在此超时限制之后,对事务所做的任何工作都将被拒绝,并QLDB丢弃会话。此限制通过启动事务(而不提交或取消事务)以保护客户端免遭泄漏会话。

如果这是应用程序中常见的异常,那么很可能是事务运行时间过长。如果事务运行时间超过 30 秒,请优化您的语句以加快事务速度。语句优化的示例包括每个事务运行更少的语句和调优表索引。有关更多信息,请参阅 优化查询性能

InvalidSessionException

消息:会话 sessionId 已过期

QLDB已放弃会话,因为它已超过其最大总生命周期。QLDB无论交易是否处于活动状态,都会在 13-17 分钟后丢弃会话。会话丢失或受损的原因有很多,如硬件故障、网络故障或应用程序重启。因此,对会话QLDB强制使用最长生命周期,以确保客户端软件能够抵御会话故障。

如果您遇到此异常,我们建议您获取一个新的会话并重试该事务。我们还建议使用最新版本的QLDB驱动程序,它代表应用程序管理会话池及其运行状况。

InvalidSessionException

消息:没有这样的会话

客户试图QLDB使用不存在的会话进行交易。假设客户端正在使用先前存在的会话,则由于以下原因之一,该会话可能不再存在:

  • 如果会话涉及内部服务器故障(即HTTP响应代码为 500 的错误),则QLDB可以选择完全放弃该会话,而不是允许客户使用状态不确定的会话进行交易。然后,对该会话的任何重试尝试都会失败,并出现此错误。

  • 过期的会话最终会被遗忘QLDB。然后,任何继续使用会话的尝试都会导致此错误,而不是初始 InvalidSessionException

如果您遇到此异常,我们建议您获取一个新的会话并重试该事务。我们还建议使用最新版本的QLDB驱动程序,该驱动程序代表应用程序管理会话池及其运行状况。

RateExceededException

消息:已超出速率

QLDB根据来电者的身份限制了客户端。QLDB使用令牌存储桶限制算法,在每个区域、每个账户的基础上强制执行限制。QLDB这样做是为了帮助提高服务的性能,并确保所有QLDB客户都能公平使用。例如,尝试使用 StartSessionRequest 操作获取大量并发会话可能会导致节流。

为了保持应用程序的运行状况并缓解进一步的节流,您可以使用指数回退和抖动来重试此异常。指数回退的原理是对于连续错误响应,重试等待间隔越来越长。我们建议使用最新版本的QLDB驱动程序。驱动程序具有默认的重试策略,该策略使用指数回退和抖动来自动重试此类异常。

如果您的应用程序持续受到调用限制,则最新版本的QLDB驱动程序也可以QLDB提供StartSessionRequest帮助。驱动程序维护着一个跨事务重复使用的会话池,这有助于减少应用程序发出的 StartSessionRequest 调用次数。要申请提高限API流限制,请联系中心。AWS Support

LimitExceededException

消息:已超出会话限制

分类账的活跃会话数量超过了其配额(也称为限制)。此配额在 Amazon 中的配额和限制 QLDB 中定义。分类账的活动会话计数最终是一致的,并且始终在配额附近运行的分类账可能会定期看到此异常。

为了保持应用程序的运行状况,我们建议重试此异常。为避免出现这种异常,请确保在所有客户端上为单个分类账配置的并发会话不超过 1,500 个。例如,您可以使用适用于 Java 的 Amazon QLDB 驱动程序的maxConcurrentTransactions方法来配置驱动程序实例中的最大可用会话数。

QldbClientException

消息:流结果仅在父事务打开时有效

交易已关闭,无法用于从中检索结果QLDB。事务在提交或取消时关闭。

当客户端直接处理Transaction对象,并且在提交或取消事务QLDB后尝试从中检索结果时,就会发生这种异常。为了缓解此问题,客户端必须在关闭事务之前读取数据。