我正在尝试在Google Cloud Spanner上运行一些复杂的SQL查询来评估其分析性能。我一直在使用命令行工具(gcloud spanner databases execute-sql
)和python客户端库(特别是snapshot.execute_sql
方法),在这两种情况下我都会在大约25分钟后出现超时。在python情况下(我更感兴趣)我甚至没有收到错误消息 - 实例的CPU活动变为0,客户端只是挂起等待结果。
Spanner docs没有明确说明只读事务没有超时,但是一个stackoverflow答案声称它(Way to prevent transaction timeout?)
所以,基本上我的问题是:在Spanner的服务器端是否真的超时了SQL执行?如果是,如何调整它,如果没有可能是所述问题的原因?
答案 0 :(得分:0)
我认为这是由于Cloud Spanner的垃圾收集器通过删除已删除或过时的数据版本来回收旧版本的数据。根据文档,垃圾收集器删除超过1小时的版本。这也意味着事务永远不能读取超过1小时的数据版本,实际上也会在所有(只读)事务上超时1小时。
请参阅文档的这一部分:https://cloud.google.com/spanner/docs/reference/rest/v1/TransactionOptions,然后特别是旧sessions.read时间戳和垃圾收集部分。