微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CockroachDB:为什么删除会随着时间变慢?

如何解决CockroachDB:为什么删除会随着时间变慢?

我注意到我的 CockroachDB 删除随着时间的推移变得越来越慢。为什么会这样,我该如何解决

解决方法

来自 CockroachDB 文档: CockroachDB 依靠多版本并发控制(MVCC)来处理并发请求,同时保证强一致性。因此,当您删除一行时,它不会立即从磁盘中删除。该行的 MVCC 值将一直保留,直到由适用区域配置中的 gc.ttlseconds 变量定义的垃圾收集周期过去。默认情况下,此时间段为 25 小时。

这意味着在默认设置下,DELETE 语句的每次迭代都必须扫描过去 25 小时内之前标记为删除的所有行。如果您尝试在同一 25 小时内删除 10,000 行 10 次,则第 10 个命令必须扫描先前标记为删除的 90,000 行。

为了保持迭代 DELETE 查询的性能,我们建议采用以下方法之一:

在每次迭代时,更新 WHERE 子句以仅过滤尚未标记为删除的行。有关示例,请参阅上面的索引过滤器上的批量删除。 在每次迭代时,首先使用 SELECT 语句返回尚未删除的行上的主键值。不会返回标记为删除的行。然后,在较小的批量大小上使用嵌套的 DELETE 循环,过滤主键值。有关示例,请参阅上面对非索引列的批量删除。 要在恒定时间内迭代删除行,使用简单的 DELETE 循环,您可以更改区域配置并将 gc.ttlseconds 更改为低值,例如 5 分钟(即 300),然后每个 GC 间隔运行一次 DELETE 语句。

,

为您的 WHERE 查询的 DELETE 部分创建索引:
https://www.cockroachlabs.com/docs/v20.2/indexes#best-practices

阅读更多:
https://www.cockroachlabs.com/docs/v20.2/delete#batch-delete-on-an-indexed-column

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?