用戶定期運行報告數據庫阻止用戶這樣做CRUD操作並導致超時。我想爲報表用戶創建當前表格的重複位置。單獨的表/報告和CRUD操作
我正在考慮創建一個備份應用程序數據庫的工作,並將其恢復到同一臺服務器上的報告數據庫,以便將運行報告的用戶與正在執行CRUD操作的用戶分開。這項工作每10分鐘左右運行一次。初始測試顯示開始和結束時間約爲30秒。磁盤空間不是問題。
這是一個好/壞主意?我應該注意哪些缺陷?有一個更好的方法嗎?
用戶定期運行報告數據庫阻止用戶這樣做CRUD操作並導致超時。我想爲報表用戶創建當前表格的重複位置。單獨的表/報告和CRUD操作
我正在考慮創建一個備份應用程序數據庫的工作,並將其恢復到同一臺服務器上的報告數據庫,以便將運行報告的用戶與正在執行CRUD操作的用戶分開。這項工作每10分鐘左右運行一次。初始測試顯示開始和結束時間約爲30秒。磁盤空間不是問題。
這是一個好/壞主意?我應該注意哪些缺陷?有一個更好的方法嗎?
這聽起來像一個好主意。我唯一擔心的是你需要每10分鐘更新一次嗎?這也可能會在更新正在運行時放慢速度。通常這些過程是在一夜之間完成的(對他人影響最小),或者如果在白天只有三個固定點(比如上午10點,下午1點和下午4點)。
當然對於大多數企業級應用,交易數據庫始終保持從報告數據庫分離。交易系統針對OLTP進行了調整,並且報告數據庫可能會被非正規化以適應報告方案的需要。所以這幾乎是一個自然的建議。
小心做頻繁的備份 - 這可能會導致大量的停機時間!
常見的解決方案
這確實是一個常見的做法是創建一個單獨的實例只爲報道。
有些人甚至更進一步,將報告放在單獨的物理機器或集羣上,以進一步隔離這部分負載。
這兩者都可以用複製(避免停機問題)來處理。或者你可以做一個每晚備份並反對報告。
我還想提到的是,高端方法是數據倉庫,其中您將本新報表數據庫轉換爲更高效的報表存儲庫,可以更有效地進行報表。這往往是非常耗時的實施,所以它是而不是您正在尋找的快速修復。
最後的思考
最後一件事:我已經看到了這個問題的風口浪尖上一些商店儘量避免和它打交道。這裏是外賣:報告在月份或某一年的某個時間段往往會激增,所以如果您通常處於查殺數據庫服務器的邊緣,那麼本月的最後一週可能會將您推向邊緣!
這個問題是非常相似:https://stackoverflow.com/questions/190512/sql-server-separate-database-for-reports
在你做一個全面的系統升級,您可能會看到,如果把
...from sometable WITH (NOLOCK)
您的報告查詢
從而減輕了問題。它可能至少會讓你花一些時間來弄清楚什麼是最優的。
每10分鐘運行一次30秒的備份幾乎會造成5%的停機時間...... – cjk 2010-02-22 17:15:18
誰在備份/恢復期間受到影響?這只是報告用戶在恢復部分? – GernBlandston 2010-02-22 21:21:09
另外,如果我將數據庫恢復到臨時數據庫,如果在完成時刪除報告數據庫並將臨時數據庫重命名爲報告數據庫,該怎麼辦? – GernBlandston 2010-02-22 21:24:59