2009-02-08 65 views
1

我最近與一位SQL Server 2005用戶交談,他說他們的數據庫過度規範化,並且他們將數據複製到報表服務器。數據庫不是應該處理事務和報告嗎?爲什麼我必須投資2臺服務器並進行復制?是不是隻是用於報告開銷的SQL Server?

我知道這是一個開放式的主觀性問題,我沒有上述情況下的統計數據,但沒有調整數據庫足以處理事務報告?我可以理解,對於數據挖掘場景,我們需要一個具有Analysis Services和解規範的獨立服務器。但是對於當年的交易?

謝謝。

回答

3

這取決於。

完全有可能在模式針對報表進行優化的數據庫中處理一年或甚至一個月的詳細數據,或者甚至只是索引方案不同。

這還取決於報告類型,如果您將當前月份趨勢與過去幾個月進行比較,則將它們放在同一個數據庫中會更容易。如果每天移動平均值,那麼在單個數據庫中執行操作要比在數據庫邊界上執行該操作容易得多。

只要過度標準化 - 這可能意味着很多事情。

-1

過度標準化通常意味着報告用戶不理解數據模型。您可能希望遠離事務數據庫的那種用戶。與使事務數據庫無響應相比,複製服務器是非常便宜的解決方案,因爲報告用戶正在進行奇特的連接。

它主要是一個簡單的組織措施,在操作和報告用戶之間創建一個邊界。

0

在純粹的技術層面上,沒有理由將兩臺服務器分開。這很可能是因爲「商業原因」做出的決定,例如:

  1. 根據報告的複雜程度,它們在運行時可能消耗大量資源。如果這會影響系統其他用戶的性能,這是將數據轉儲到單獨的「報告」數據庫服務器的一個參數。

  2. 如果運行報告的人正在編寫原始SQL,但並不是有經驗的DB開發人員,那麼首先將數據轉換爲非規範化格式可能會很有用,這樣他們可以更輕鬆地使用它們。它也可能有助於加快報告本身的表現。

2

我覺得從生產/交易服務器有一個單獨的報告服務器往往是一個好主意。我已經設置了一個完全「非標準化」的數據結構的報告服務器,並且會讓關係純粹主義者畏縮......但它是一個報告服務器,所以它並不重要。

用戶喜歡能夠在沒有DBA支持的情況下獲得「他們的」數據(報告數據庫當然是只讀數據庫)。

一組例程(或更好的是無人值守的每夜批處理),它從生產服務器提取數據,並將其彙總,彙總,交叉和清理,以便爲用戶獲取可用信息最快的方式,通常是一個很好的解決方案。

在我的情況下,絕對是把我的工作量放在那些「可以爲我創建一個會顯示.....」類型的請求的人。讓用戶訪問數據並在工具上訓練他們,並讓他們知道。

0

這真的取決於您的環境和應用程序。有一個單獨的報告服務器是一個安全的賭注。如果您的生產系統具有高度規範化的模式,並且發生大量事務並引發記錄鎖定,那麼針對此操作運行復雜的報告可能會產生毀滅性的性能命中。例如,如果由其他開發人員構建的報表查詢在複雜的連接中不包含(NOLOCK),則肯定會遇到麻煩。有了正確的查詢(即錯誤),您可以將整個數據庫停下來。如果報告允許用戶提取大量數據,您可能也需要查看這些數據。您可能需要防止允許用戶運行此類查詢。僅通過請求進行報告。恕我直言

0

兩個數據庫可以說是有道理的。這是我自己的經驗的一個例子。

數據庫1用於收集數百萬設備租賃的付款記錄。這個數據庫的主要目的是從各個貸方收集數據並作爲INPUT計算信用評分。這個數據庫非常龐大,更新了很多,從未暴露在網絡中。

數據庫2用於報告。小多了。從未更新。具有信用評分計算的輸出。通過網絡訪問。包含許多表格,索引以支持通過名稱,地址等進行模糊搜索。

如果您認爲數據庫1獲得許多更新,那麼一再重複更新搜索相關索引將會是浪費。如果你認爲數據庫1是巨大的,而數據庫2是小型的,那麼把多餘的數據發送到面向網絡的機器是非常浪費的。

3

對於規模的應用程序,應用程序(OLTP)和報告(DW)負載可能通常非常不同。 OLTP事務一次處理少量記錄,經常發生,可能是選擇,插入或更新。 DW查詢往往會處理大量的記錄,發生次數少,應該只讀。

在較小的應用程序或尚未有數據歷史的年輕應用程序中,性能不會成爲問題。但隨着您的應用程序不斷增長並獲得普及,將需要一個單獨的數據庫,並最終需要一個單獨的服務器來滿足應用程序性能和分析報告的業務需求。

下面是兩種工作負載的概述。

OLTP查詢通常由開發人員編寫,他們對應用程序性能具有既得利益,並確切知道他們試圖滿足哪種類型的業務功能。相同的查詢每天執行多次,問題會被調出。以下是一些工作負載的例子。

  • 記錄銷售。
  • 驗證密碼。
  • 檢索產品詳細信息。
  • 更新用戶配置文件。

DW查詢可能由自定義報告的查詢工具自動生成,也可能由技術經驗不多的分析人員或業務用戶直接編寫。有些人可能更喜歡在他們選擇的工具(如SAS或Mathematica)中選擇*。這些類型的查詢(如果不使用髒讀取)可能會嚴重影響OLTP應用程序的性能。即使是一個寫得很好的查詢來進行趨勢分析或將大量客戶分組爲百分位數,由於需要所有數據,也可能需要全表掃描。可能需要回答的問題類型。

  • 本週上個月有多少輛自行車在這裏出售。
  • 什麼是最受歡迎的產品。
  • 高利潤率的產品在什麼時間賣出。
  • 給我一個年度瀏覽量的趨勢圖。
0

這可能是最好的解決方案,這取決於報告用戶的精明程度以及他們使用的是什麼工具;如果他們必須手動加入8個表才能獲得臨時客戶報告,他們最好使用具有視圖的報表服務器,以便爲他們完成所有骯髒的工作。

0

如果他們不瞭解數據結構,則爲報表編寫者創建一些視圖(只讀)。事務負擔低時運行資源密集型報告。有一個開發數據庫來防止干擾生產。

當情況不同步,並且您花費大量時間查找問題時,情況總是會出現。

高度理論化,但我的關係數據庫教授會說,唯一的數據重複是主/外鍵關係或用於備份/測試目的的副本。我想聽聽他對數據倉庫的看法。