【问题标题】:Deleting records from 'orbeon_form_data_attach' due to ever growing size of the table由于表的大小不断增长,从“orbeon_form_data_attach”中删除记录
【发布时间】:2017-02-09 12:34:39
【问题描述】:

Orbeon Form 4.6 PE 在我们的生产环境中运行了 6 年。我们有大约 200 个表单,此时我们的 orbeon_form_data_attach 增长到 15 GB。我们一直在考虑如何从这个表中归档记录,并删除早于 6 个月创建的记录。

这是我们在生产数据库副本中尝试的查询,它将表大小从 15 GB 减少到 6 GB。

DELETE orbeon_form_data, orbeon_form_data_attach
FROM
    (
        SELECT document_id
        FROM   orbeon_form_data
        WHERE  app <> 'orbeon' AND
               form <> 'builder' AND
               last_modified_time <= DATE_SUB(curdate(), INTERVAL 6 MONTH)
    ) as deletions
INNER JOIN orbeon_form_data
ON         deletions.document_id=orbeon_form_data.document_id
LEFT JOIN  orbeon_form_data_attach
ON         orbeon_form_data.document_id = orbeon_form_data_attach.document_id ;

我们与 Orbeon Forms 集成并使用 Orbeon 数据库数据的应用程序不需要 6 个月前提交的表单数据。

真的很想知道 Orbeon 应用程序本身的任何可能的副作用,如果我们在生产中继续这个查询的话。

【问题讨论】:

    标签: orbeon


    【解决方案1】:

    我发现这有 2 个问题:

    1. 最重要的是,在某些情况下,这会删除太多数据,因为orbeon_form_data 的工作方式有点像日记,其中添加了新行,但“从不”更新或删除。比如说,一个新的表单实例(文档 ID)是 1 年前创建的,今天刚刚更新:然后您将有 2 行具有相同的 document_id 但不同的 last_modified_time,您的查询将删除此文档,因为一个其中 2 人的 last_modified_time 超过 6 个月。
    2. 可以更新上述查询以避免第 1 点中提到的问题,但它可能比需要的更激进。

    所以,我会推荐:

    1. 您从文档的Purging Old Data 部分中的查询开始,这些查询更为保守。第一个删除 已删除 个月之前的数据,第二个删除不再引用的附件。从这些开始,看看这是否会将数据量减少到对您更合理的水平。
    2. 如果这没有删除足够的数据,请在上面的查询中尝试用下面的查询替换 ( … ) as deletions 中的子查询。在运行此命令时要非常、非常、非常小心:重新阅读查询以确保它有意义,并在对任何敏感数据运行之前备份您的数据。

      SELECT document_id
      FROM   orbeon_form_data d,
             (
               SELECT   document_id, max(last_modified_time) last_modified_time
               FROM     orbeon_form_data
               WHERE    app  <> 'orbeon' AND
                        form <> 'builder'
               GROUP BY document_id
             ) l
      WHERE  d.document_id          = l.document_id        AND
             d.last_modified_time   <= DATE_SUB(curdate(), INTERVAL 6 MONTH);
      

    另外,我应该提到,有时删除数据的动机不是为了节省磁盘空间,而是为了提高性能。在这方面,Orbeon Forms 2016.2 具有新的索引,可在您拥有大量数据时大大提高摘要页面和搜索 API 的性能。

    【讨论】:

    • 嗨,Alex,感谢您提供详细的反馈。我们主要关心的是应用程序数据库的大小。数据库总大小:25 GB Orbeon 表单附件表:15 GB 我们过去曾尝试仅删除已删除的数据,但在数据库大小方面没有任何显着增加。根据我们的应用程序设计,我们解析并保留了经过分集的 Orbeon 表单数据以及附件,这导致我们想出删除所有 Orbeon 数据和附件,这些数据和附件是 6 个月或更早。我们将运行您在我们的生产数据库副本中提到的查询,并发布结果。谢谢
    • 嗨,Bilal,知道了,如果 2 个“保守”查询为您删除了足够的数据,您会告诉我的。如果没有,我们会为您提供的查询的更新版本不存在我上面“第 1 点”中提到的问题。
    • 嗨,Alex,这是对生产数据库进行保守查询的结果。查询 1:返回 0 行。原因:此查询删除通过 Orbeon UI(Form Builder 或 Form Runner)删除的记录,但我们没有任何用例执行此操作。查询 2:返回 7 行。
    • 嗨 Bilal,所以,换句话说,在你的情况下,这没有帮助:)。所以我可以在一个实际的数据库上尝试查询,你使用的是什么关系数据库? (我在 Oracle 上试过你的查询,但这似乎不是。)
    • 嗨,Alex,我们使用的是 MySQL 5.6 版。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2018-07-11
    • 2020-12-21
    • 2015-02-17
    • 2023-03-09
    • 2015-04-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多