【问题标题】:SQLite vacuuming / fragmentation and performance degradationSQLite 吸尘/碎片和性能下降
【发布时间】:2015-01-04 21:27:58
【问题描述】:

假设我定期将数据插入 SQLite 数据库,然后清除前 50% 的数据,但我不清理。

我现在是否对文件的前 50% 有类似归零的页面? 如果我添加另一批数据,我是否会填写那些归零的页面?

手册中提到了数据的碎片化:

频繁的插入、更新和删除会导致数据库文件变得碎片化——单个表或索引的数据分散在数据库文件周围。

VACUUM 确保每个表和索引在很大程度上连续存储在数据库文件中。在某些情况下,VACUUM 还可以减少数据库中部分填充的页数,从而进一步减小数据库文件的大小。

但这并不表示这必然会导致性能下降。 它主要暗示可以从吸尘器中节省的空间浪费。

对于严格连续页面中的数据是否有明显的性能提升? 我可以期待一个包含大量碎片数据的数据库的“糟糕”性能吗?

【问题讨论】:

    标签: sqlite vacuum premature-optimization


    【解决方案1】:

    SQLite 自动重用空闲页面。

    只有在以下情况下,碎片化页面才会导致性能下降

    • 数据量太大,无法缓存,而且
    • 您的存储设备的寻道速度相对较慢(例如硬盘或廉价闪存设备),并且
    • 您访问数据的频率足够高,差异很重要。

    只有一种方法可以确定您的应用程序是否属于这种情况:测量它。

    【讨论】:

    • 是的,但不是你想象的那样。
    • 一个评论可能会要求对答案进行一些澄清,但页面缓存写入顺序与从磁盘读取碎片页面无关。如果您有问题,请提出问题。
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2011-12-07
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多