GCP扳手:用于扳手中批量更新/删除的Partitioned-dml很慢,并且在10-15分钟后会超时

时间:2019-08-02 11:29:16

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

背景:我正在运行一些必须清除数千条记录的脚本。从扳手控制台运行它时,通常会出现类似“-交易被中止。它被更高优先级的交易所伤...”或只是“交易中止了”

我可以理解,这可能是由于与实时请求之间存在一些冲突(再讨论一天)。因此,我正在尝试GCP建议使用partitioned-dml进行此类操作。

问题:我注意到partitioned-dml非常慢,从Cloudshell运行它时很快就会超时。

我尝试过的方法:我什至尝试了很少的记录,但是却花费大量时间,而成千上万的记录却超时。

示例脚本-gcloud扳手数据库execute-sql --instance = <> --enable-partitioned-dml --sql ='从ABC删除,其中X =“ M”和Y =“ N”'

在云shell上返回错误消息-

“错误:(gcloud.spanner.databases.execute-sql)('读取操作超时',)这可能是由于网络连接问题引起的。请检查您的网络设置以及您所使用的服务的状态试图到达。”

2 个答案:

答案 0 :(得分:2)

这可能与查询本身有关。确保将主索引包括在它的WHERE子句中,您可以看到示例here。另外,不建议将Cloud Shell用于如此密集的operations。最好使用Compute Engine VM与其连接并从中运行操作。

答案 1 :(得分:2)

对于分区DML,可以不指定主键,因为Spanner会为您自动对事务进行分区。但是,它确实必须扫描整个表,因此从shell运行时很容易超时。

我不一定要说您需要从Compute Engine VM运行它,因为它不会将数据发送回客户端。但是您可能确实希望通过代码而不是从Shell运行请求,因此可以控制超时。示例代码位于https://cloud.google.com/spanner/docs/dml-partitioned