2010-02-22 87 views
8

用戶定期運行報告數據庫阻止用戶這樣做CRUD操作並導致超時。我想爲報表用戶創建當前表格的重複位置。單獨的表/報告和CRUD操作

我正在考慮創建一個備份應用程序數據庫的工作,並將其恢復到同一臺服務器上的報告數據庫,以便將運行報告的用戶與正在執行CRUD操作的用戶分開。這項工作每10分鐘左右運行一次。初始測試顯示開始和結束時間約爲30秒。磁盤空間不是問題。

這是一個好/壞主意?我應該注意哪些缺陷?有一個更好的方法嗎?

回答

3

這聽起來像一個好主意。我唯一擔心的是你需要每10分鐘更新一次嗎?這也可能會在更新正在運行時放慢速度。通常這些過程是在一夜之間完成的(對他人影響最小),或者如果在白天只有三個固定點(比如上午10點,下午1點和下午4點)。

+1

每10分鐘運行一次30秒的備份幾乎會造成5%的停機時間...... – cjk 2010-02-22 17:15:18

+0

誰在備份/恢復期間受到影響?這只是報告用戶在恢復部分? – GernBlandston 2010-02-22 21:21:09

+0

另外,如果我將數據庫恢復到臨時數據庫,如果在完成時刪除報告數據庫並將臨時數據庫重命名爲報告數據庫,該怎麼辦? – GernBlandston 2010-02-22 21:24:59

1

當然對於大多數企業級應用,交易數據庫始終保持從報告數據庫分離。交易系統針對OLTP進行了調整,並且報告數據庫可能會被非正規化以適應報告方案的需要。所以這幾乎是一個自然的建議。

1

小心做頻繁的備份 - 這可能會導致大量的停機時間!

常見的解決方案

這確實是一個常見的做法是創建一個單獨的實例只爲報道。

有些人甚至更進一步,將報告放在單獨的物理機器或集羣上,以進一步隔離這部分負載。

這兩者都可以用複製(避免停機問題)來處理。或者你可以做一個每晚備份並反對報告。

我還想提到的是,高端方法是數據倉庫,其中您將本新報表數據庫轉換爲更高效的報表存儲庫,可以更有效地進行報表。這往往是非常耗時的實施,所以它是而不是您正在尋找的快速修復。

最後的思考

最後一件事:我已經看到了這個問題的風口浪尖上一些商店儘量避免和它打交道。這裏是外賣:報告在月份或某一年的某個時間段往往會激增,所以如果您通常處於查殺數據庫服務器的邊緣,那麼本月的最後一週可能會將您推向邊緣!

這個問題是非常相似:https://stackoverflow.com/questions/190512/sql-server-separate-database-for-reports

2

在你做一個全面的系統升級,您可能會看到,如果把

...from sometable WITH (NOLOCK) 
您的報告查詢

從而減輕了問題。它可能至少會讓你花一些時間來弄清楚什麼是最優的。

+0

但是請記住,您會以這種方式弄髒閱讀,這可能是報告中的問題。 – HLGEM 2010-02-22 18:55:28

+0

@HLGEM - 確實如此,但是反正現在的計劃數據是10分鐘大!過去,我們遇到過類似的問題,即針對企業級數據庫運行非常大的查詢,並且NOLOCK造成了巨大的差異。 PK :-) – 2010-02-22 21:04:14

+0

JUST指出它可以產生結果差異。如果你能忍受骯髒的閱讀是一回事,但海報需要知道這是他會得到的。 – HLGEM 2010-02-22 22:08:14