【问题标题】:CockroachDB: Why are deletes getting slower over time?CockroachDB:为什么随着时间的推移删除速度会变慢?
【发布时间】:2021-05-02 20:33:36
【问题描述】:

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

【问题讨论】:

    标签: cockroachdb


    【解决方案1】:

    来自 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 语句。

    【讨论】:

    • 很难DELETE 像蟑螂一样很难杀死
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2016-02-20
    • 2016-02-13
    • 2018-06-25
    相关资源
    最近更新 更多