台灣最大程式設計社群網站
線上人數
1220
 
會員總數:239914
討論主題:186054
歡迎您免費加入會員
討論區列表 >> ASP.NET >> SQL逾時的解決方式
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL逾時的解決方式
價值 : 10 QP  點閱數:2476 回應數:11

樓主

Wind
門外漢
0 87
1130 140
發送站內信

關於sql的逾時方式,目前有用過的是加大timeout的時間。
以前我還用過幾種,
一、在a.html,用ajax方式去呼叫b.asp,然後一筆一筆丟出來。讓前端都有回應,不會造成逾時。
二、用buffer的方式,處理一次,丟一次,也不會造成逾時。

但現在mvc,可以用這樣的方式嗎?
我不用第一種的方式去,我想要在module裡,讓網頁跟sql來回有回應,怎麼做比較好?
是用sleep的方式嗎?

搜尋相關Tags的文章: [ sql逾時 ] , [ 網頁逾時 ] ,
本篇文章發表於2014-12-07 16:52
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Mark Shu
捐贈 VP 給 Mark Shu 檢舉此回應
治本的方式去檢查你的sql server主機和網路問題、還有你下的sql是否有問題
抓取十筆資料若也是非常慢,哪就要好好檢查相關的問題,否則資料庫回傳處理結果就是非常慢,再怎麼改程式也不可能變快
本篇文章回覆於2014-12-07 18:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Wind
檢舉此回應
這個我知道,因為業務需求,所以有大量的運算式在裡面,所以才想用程式的方式解決
本篇文章回覆於2014-12-07 21:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

demo
捐贈 VP 給 demo 檢舉此回應
如果大量到SQL會逾時你應該從流程面下手,使用者只是 Trigger 一個事件,就可以回傳HTML了

相關的報表在SERVER做完以後使用EMAIL或是任何的通知機制告訴USER東西做好了
本篇文章回覆於2014-12-07 21:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
首先想請教的是,SQL必須長時間運作,這是已經無法避免,也已經做好SQL的效能調教,的結果嗎?
如果不是,SQL還有效能調教的空間,那麼建議您先進行相關的SQL調教

如果是運作的展示資料類型,是大部分為舊的既定資料,也不會更改,只有少部分是即時性資料
那麼建議資料庫的相關資料針對此查詢進行資料分割,舊資料且不會更改的部分,先用批次算好。剩下的即時的部分,善用Index進行查詢最佳化後,最後將兩個資料重新Union起來

---
如果您的SQL是結帳的批次作業,確定必須很久的時間,而使用者就在等SQL結帳作業的最後結果,除了#3說的,可以Trigger透過EMail來通知使用者外,另外也可以嘗試著在批次完成後,Trigger一個SignalR來通知Client端,這樣Client端就不必一直等待怕Web端逾時,只要等候由SignalR從Server端發出來通知就好

在不確定您的SQL類型前,以上是小喵的建議
由於不是很確定樓主您的SQL到底是運作什麼樣的類型,建議樓主可以進一步說明您的SQL要做的是什麼樣的事情
^_^

本篇文章回覆於2014-12-08 21:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
通常SQL逾時,最有可能的原因就是「效能不佳的SQL語法所造成」,

所以,先檢查您的SQL語法是否符合優化原則,

如果都符合,那通常就是索引忘了設,檢查一下語法中的WHERE條件、JOIN的ON條件,相關欄位是否都有設索引,

通常問題就出在上面這兩者之中,可以先試試,祝好運!
本篇文章回覆於2014-12-09 19:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Wind
檢舉此回應
topcat 這個我有想過,如果我是mvc 還在m的階段,有辦法不讓sql與m中間,不要有逾時的情況嗎?
本篇文章回覆於2014-12-10 13:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
1.您的SQL在做什麼?為何要這麼久?
小喵覺得說清楚這部分,才能給您更合適的建議

2.您的存取,透過什麼方式(ADO.NET? Entity Framework? ...)
如果是ADO.NET,您可以找一下CommandTimeout, ConnectionTimeout的關鍵字

^_^
本篇文章回覆於2014-12-11 08:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

Wind
檢舉此回應
topcat 因為是有計算數量,例如有幾本書,算成一本等等之類的規則,有蠻多大量的計算,這個部份是請別人那邊做的,資料庫不在我們這兒,所以語法是別人的,我只是引用,
故而語法我沒有辦法調整。

看起來只能調整timeout的方式來做了嗎?
本篇文章回覆於2014-12-11 09:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
>>資料庫不在我們這兒,所以語法是別人的,我只是引用,故而語法我沒有辦法調整。

建議根本上,SQL上面如果可以改進會是最好的源頭
但既然不在你的管轄範圍,建議您還是反映一下請他們改進

而您這邊,調整TimeOut是比較簡單的方式。
只是使用者還是要等等等~

^.^a
本篇文章回覆於2014-12-11 10:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

Wind
檢舉此回應
好吧,謝謝了
本篇文章回覆於2014-12-11 14:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

MIS2000 Lab
檢舉此回應
我們公司有所謂 End-to-End報表
客戶很蠻橫
堅持從今天算起,一路追碩到系統啟動的第一天(十年前)

這種情況不管怎麼SQL指令最佳化都沒效了
因為不可能完成,日積月累,在Web上面總有一天會做不完

最後的解法,就是每天清晨作一次,一早八點就能看到報表
中午(午休時間)做一次,下午一點半看到上午報表

當然,是資料庫的Job來處理,不是透過Web程式來做

真的很蠢,但是客戶...很蠻橫
很多協助的同仁都在恥笑,他根本不會去看古早資料了,卻堅持一些蠢要求,表彰他官大學問大的姿態 :-P
本篇文章回覆於2014-12-15 11:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.