【问题标题】:Why read-only transaction timeouts in Spanner?为什么 Spanner 中的只读事务超时?
【发布时间】:2017-11-23 16:02:20
【问题描述】:

我正在尝试在 Google Cloud Spanner 上运行一些复杂的 SQL 查询来评估其分析性能。我一直在使用命令行工具(gcloud spanner databases execute-sql)和 python 客户端库(特别是snapshot.execute_sql 方法),在这两种情况下,我都会在大约 25 分钟后超时。在 python 情况下(我更感兴趣)我什至没有收到错误消息 - 实例的 CPU 活动变为 0,客户端只是挂起等待结果。

Spanner 文档没有明确说只读事务没有超时,但一个 stackoverflow 答案声称它 (Way to prevent transaction timeout?)

所以,基本上我的问题是:在 Spanner 的服务器端执行 SQL 真的有超时吗?如果是,如何调整它,如果不是,那么问题的原因是什么?

【问题讨论】:

    标签: google-cloud-platform google-cloud-spanner


    【解决方案1】:

    我认为这是由于 Cloud Spanner 的垃圾收集器通过删除已删除或过期的数据版本来回收旧版本的数据。根据文档,垃圾收集器会删除超过 1 小时的版本。这也意味着事务永远不能读取早于 1 小时的数据版本,这实际上也为所有(只读)事务设置了 1 小时的超时时间。

    请参阅文档的这一部分:https://cloud.google.com/spanner/docs/reference/rest/v1/TransactionOptions,然后尤其是 Old sessions.read Timestamps and Garbage Collection 部分。

    【讨论】:

    • 这是否意味着 Spanner 垃圾会收集查询的中间结果?有没有办法调整垃圾收集间隔?
    • 当您发出查询时,您也隐式或显式启动事务。此事务中的所有读取都将在特定时间戳(您的事务时间戳)处读取数据。 Cloud Spanner 不会垃圾收集查询的中间结果,但 Cloud Spanner 会垃圾收集您的查询尚未读取但仍需要读取的数据。据我所知,没有可能对此进行调整。这也是你不应该做的事情。交易持续时间超过 1 小时,也意味着您将锁定数据超过 1 小时。
    • Poideshь v futbik igratь?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2011-07-10
    • 2015-12-20
    • 2020-01-06
    相关资源
    最近更新 更多