2010-02-13 58 views
2

我們正在使用帶有WCF後端的ASP.NET MVC構建外聯網貸款狀態檢查網站。它是MVC站點的一個非常標準的設計,使用WCF服務引用來獲取客戶對象。該服務使用Oracle後端+ http綁定,並且不會與MVC站點託管在同一臺服務器上(因此我們不能使用tcp綁定來減少延遲)。ASP.NET MVC/WCF站點和Oracle後端的性能問題

我們遇到的問題是每次調用服務都會導致7-8s的響應時間,這對於Extranet站點來說是不可接受的,並且比2s魔術標記高得多。服務方法調用12個存儲過程來創建客戶對象。不幸的是,數據庫非規範化(我們無法將其更改爲其他內部生產系統所使用的數據庫),因此大多數調用都是基本的選擇語句,它們填充了客戶對象及其關聯的對象。服務代理在MVC操作中正確地打開和關閉/處理,因此不存在任何服務連接泄漏的實例。爲每個請求創建一個新的客戶端代理(即,我們不使用服務的單例模式)。

任何想法我們如何加快這一點?

謝謝

回答

0

在您準確測量真正發生的事情之前,不要太快地假設瓶頸在哪裏。

您確實需要執行Oracle擴展SQL跟蹤以查看緩慢來自何處。除此之外的任何事情大多都是猜測。下面是從卡里 - 米爾薩普(R法和以前Hotsos)的一份文件,你可以下載一個細節做這個:

http://method-r.com/downloads/doc_details/10-for-developers-making-friends-with-the-oracle-database-cary-millsap

+1

謝謝大家的回覆。 我們發現了這個性能問題的解決方案。對於12個存儲過程中的10個,我們在索引字段上使用了LOWER oracle sql函數。一旦我們將其刪除,我們的服務響應時間從8秒降至2秒以內。 – fjxx 2010-02-16 16:48:24

1

聽起來好像你已經知道問題所在 - 它是數據庫。

我從來沒有聽說過一個WCF操作需要超過一秒的時間來設置和拆除,不包括任何內部的邏輯。所以,即使你可以削減1-2秒的延遲時間(這可能是一個樂觀的估計),但如果數據庫操作本身需要5-6秒的時間,這並沒有什麼幫助。

老實說?運行12個存儲過程來創建客戶完全是離牆的。存儲過程的目的是封裝執行復雜數據庫操作所需的所有邏輯。你需要做的第一件事是將其改爲一個存儲過程 - 然後如果它仍然很慢,請對數據庫進行配置以查看需要花費的時間並相應地修復它。通常數據庫性能差是由於一個或多個缺少索引。

+0

感謝您的答覆。我們有12個存儲過程的原因是因爲客戶信息存在於不同的表格中(地址,貸款利率等),每個表格都需要查詢 - 所以您建議從一個存儲過程中的多個表中提取所有信息? – fjxx 2010-02-13 05:27:46

+0

@fjxx:您可以先將邏輯放入一個存儲過程。但更有可能你不需要單獨查詢12個單獨的表,你可以用一組連接來完成。即使如此,8秒聽起來也太多 - 你可能沒有一些或任何表索引正確。 – Aaronaught 2010-02-13 15:03:13