2017-02-10 115 views
-2

目前我們有一個審計日誌表,其中包含超過11M條記錄。無論在索引和統計信息中,引用此表的任何查詢都需要很長時間。大多數報告不檢查過去一年的審計記錄,但我們仍然希望保留這些記錄。什麼是處理這個最好的方法?創建歷史審計表

我在考慮讓AuditLog表保存小於或等於一年的所有記錄。然後將大於一年的記錄移到AuditLogHistory表中。也許只是每晚運行一個批處理文件來移動這些記錄,然後更新AuditLog表的索引和統計信息。這是完成這項任務的好方法嗎?或者我應該使用其他方式存儲較舊的記錄?

從AuditLog表中回來的記錄命中一個鏈接服務器,並檢查6個不同的數據庫,以查看某個條件是否存在某個成員。我無權訪問鏈接的服務器數據庫,因此只能優化我擁有的Auditlog。擊中鏈接的服務器db使用了超過90%的查詢成本。所以我只是想限制我能做的。

+0

嘗試一下你的解決方案,並製作一個專業版和騙局列表。 – dfundako

+0

在嘗試任何事情之前,如果這是實現它的最佳方式,我想獲得意見。 – user3199317

回答

3

首先,我覺得很難相信你無法在一張擁有1100萬條記錄的表格上優化查詢。您應該調查相對於頻繁運行的查詢的索引。

無論如何,你的問題的答案是「分區」。您將按日期列進行分區,並確保在所有查詢中包含此條件。這將減少數據量並可能加快處理速度。

documentation是開始學習分區的好地方。

+0

我同意分區就是答案。我只想補充一件事。該操作提到索引他們的審計日誌表。索引使讀取速度更快,但也會使插入速度變慢。日誌表可能會有很多插入和相對較少的讀取。所以他們不應該添加索引,除非他們確實需要它們。它根本不會傷害他們的報告,但可能會使進入其日誌的進程變慢。 –

+0

我有幾乎完全相同的情況,除了我有兩個鏈接的審計表,一個大約100M行,我不需要保留舊的記錄。刪除超過特定時間的審計記錄只是非常緩慢。事實證明,將表重命名爲auditlog_history大約快80倍,重新創建審計日誌表,從重命名的表中重新插入,然後截斷auditlog_history表。在你的情況下,你可以跳過截斷。當然,你將不得不刪除並重新創建任何外鍵或索引。 –

+0

從AuditLog表中找回的記錄會打到一個鏈接服務器,並檢查6個不同的數據庫,以根據條件查看它們中是否存在某個成員。我無權訪問鏈接的服務器數據庫,因此只能優化我擁有的Auditlog。擊中鏈接的服務器db使用了超過90%的查詢成本。所以我只是想限制我能做的。謝謝我將考慮分區。 – user3199317