2016-09-30 43 views
2

我們在過去的6年中在我們的生產環境中運行了Orbeon Form 4.6 PE。我們有大約200個表格,我們的orbeon_form_data_attach現在增長到15 GB。我們一直在考慮如何將此表中的記錄存檔,並刪除早於6個月創建的記錄。由於表格尺寸不斷增大而刪除'orbeon_form_data_attach'中的記錄

以下是我們在生產數據庫副本中嘗試的查詢,該查詢將此表大小從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個月前提交的表單數據。

如果我們繼續在我們的Production中進行查詢,我們是否真的想知道Orbeon應用程序本身有任何可能的副作用。

回答

0

我看到2個問題是:

  1. 最重要的是,在某些情況下,這將刪除太多的數據,作爲orbeon_form_data就像一本刊物,其中增加新的行了一點點,但「從不」更新或刪除。例如,一個新的表單實例(文檔ID)是在1年前創建的,並且今天剛剛更新:然後,您將有2行與document_id相同但不同的last_modified_time,並且您的查詢將刪除此文檔,因爲其中一個具有大於6個月的last_modified_time
  2. 上述查詢可以更新以避免第1點提到的問題,但它可能比需要更積極。

所以,我建議:

  1. 您與文檔的Purging Old Data部分查詢,這是更保守一點開始。第一個刪除刪除數據比x更舊,第二個刪除不再被引用的附件。從這些開始,看看這是否會將數據量減少到對您來說更合理的事情。
  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的性能。

+0

嗨亞歷克斯, 感謝您的詳細反饋。我們主要關心的是應用程序數據庫大小 總數據庫大小:25 GB Orbeon表格附件表:15 GB 我們嘗試刪除過去僅刪除的數據,在數據庫大小方面沒有任何重大收益。 根據我們的應用程序設計,我們解析並堅持包含Orbeon表單數據和附件,這導致我們想出 刪除所有Orbeon數據和附件,這些數據和附件都是6個月或更長時間。 我們將運行您在我們的生產數據庫副本中提到的查詢,併發布結果。 謝謝 – BAhmed786

+0

嗨Bilal,明白了,如果2個「保守」查詢爲您刪除了足夠的數據,您會讓我知道。如果沒有,我們會提出一個更新版本的查詢,它沒有上述「第1點」中提到的問題。 – avernet

+0

嗨亞歷克斯, 這是生產數據庫保守查詢的結果。 查詢1:返回0行。 原因:此查詢刪除通過Orbeon UI(Form Builder或Form Runner)刪除的記錄,但我們沒有任何用例。 查詢2:返回7行。 – BAhmed786