2013-12-20 69 views
0

我們有一個擁有數百萬條記錄的大型MS-SQL數據庫。有一些Java服務與數據庫進行交互以進行數據檢索。該應用程序處理很多LIKE,IN & JOIN子句。這會導致在服務調用java服務期間更長的響應時間,CPU使用率更高。巨大的數據庫與額外的數據庫服務器

根據我們的分析,我們確定了DB中佔據大量空間的4個大表。決定是在另一臺服務器上添加一個數據庫並分配足夠的內存。然後將這4個巨大的表格從現有的數據庫中移出。

任何人都可以請建議這個想法將有助於數據庫優化,充分利用兩個數據庫或任何其他有用的技術?

+0

您可以嘗試從sql語句中刪除邏輯並將其放入您的Java服務中。它不是一個非常乾淨的解決方案,但它會從數據庫中承受一些壓力。 – Todoy

+0

Hi @Todoy,我們在Hibernate中只有INNER JOIN和LIKE查詢。你是否建議將它分成多個查詢?請讓我知道 –

回答

0

現有服務器的CPU是否最大?通常情況下,CPU不是問題,但I/O容量是(網絡,磁盤)。您可能能夠在現有服務器上提供更多的I/O資源,然後在不同的磁盤上分發您的臨時數據庫,tx日誌以及可能的四個表。

跨兩臺服務器分割架構對於Java客戶端不會透明。另外,如果在這些表和模式的其餘部分之間存在引用完整性約束,則除非刪除約束,否則無法執行此操作。

一種替代方法是使用跨部門複製將整個架構複製到另一臺服務器。您可以將兩個實例放在負載平衡器後面。或者您將所有隻讀進程移動到複製。

儘管複製品有其自身的缺點。例如。模式更改變得更加困難,因爲不能複製所有類型的更改。停滯的TX複製是一個需要解決的難題。

在開始這些之前,請確保您有適當的索引。視圖sys.dm_db_missing_index_details可以幫助你。查看MSDN article以查看如何查詢視圖。

+0

Hi @Ralf感謝您的建議!我們從微軟獲得了專家,他提取了所有緩慢的查詢,並建議我們將所有LIKE替換爲相等。我們討論的其他選項是將特定於應用程序的查詢移至存儲過程。你認爲這會有幫助嗎? –

+0

如果您可以接受結果中可能發生的變化,那麼如果將LIKE運算符更改爲「=」,當然是有益的。通過這種方式,你會從索引中獲得更好的里程。你仍然應該檢查你是否有所有相關指標。存儲過程......很難說。如果您a)選擇大量數據而不是最終結果,並且您的客戶在開始業務之前將其濃縮,或者b)您的客戶計算結果並將其寫回正確的位置而不需要進一步使用它自己。 – Ralf