簡體   English   中英

做大量查詢時,asp.net網站停止響應

[英]asp.net website stops responding when doing heavy query

我有一個即將發布的asp.net網站。 該網站負責業務管理。 我准備發布的一件事是從購買的企業列表中將一大堆數據上傳到我們的SQL數據庫中。 為此,我使用一種非常簡單的方法:將.csv文件放在服務器上的文件夾中,並在臨時頁面上使用Page_Load事件來執行處理數據並將其放入我們的數據庫所需的邏輯。

這是一個漫長的過程。 業務列表被分解為一堆文件,並且我在頁面上設置了腳本,以便在每次刷新頁面時從一個文件導入所有數據。 每個文件大約需要10分鍾。

奇怪的是:在處理這些數據時(服務器正在處理所有內容,而page_load方法終止之前),該網站被阻止了-沒有其他用戶可以訪問它,並且該網站上的其他頁面也不會加載。 他們陷入了“正在連接...”階段。

目前,這並不是一個大問題,因為該站點僅在測試環境中運行。 但是,當站點處於活動狀態時,我可能需要使用類似的腳本將數據放入數據庫中,並且顯然,在發生這種情況時阻止所有用戶訪問是不可接受的。

我相當確定這不是SQL Server的問題,因為我可以在此過程運行時同時進行查詢,因此Web服務器一定有問題。

我無法發布代碼摘錄,因為它是漫長而又技術性的。 但是,沒有任何困難:該方法從.csv文件中讀取數據,進行處理,然后針對文件的每一行向外部服務發出HTTP請求,以收集一些更相關的數據。 然后,將所有數據插入到SQL數據庫中。

據我了解,Web服務器不應像這樣阻塞。 即使一個線程/用戶需要大量資源,他們也應該能夠一次模擬地向許多用戶提供頁面。

有什么建議可能會發生什么嗎? 我應該從哪里開始尋找解決方案?

讓請求由異步處理程序處理。

http://msdn.microsoft.com/en-us/library/ms227433%28v=vs.85%29.aspx

這將使您的網站在長期運行的過程中繼續開展業務。

ASP.NET不適用於繁重的處理。 ASP.NET頁應僅觸發操作。 后台進程應完成繁重的工作。 兩者都可以使用隊列或類似方式進行通信。 該網頁應僅報告后台任務的狀態。

這種范例在現代計算(尤其是雲計算)中至關重要。

請從msdn參考http://msdn.microsoft.com/en-us/library/ff647787.aspx#scalenetchapt06_topic8

我認為問題是您在使用asp.net的默認設置,但沒有足夠的線程,只有2個出站tcp / ip連接。 這對於真正的網站來說簡直太可怕了。

請在您的machine.config文件中更改maxconnections,maxworkerthreads等。 這些設置中有一些公式,例如12 * CPU數量等。

這應該為您提供所需的性能提升。

希望這可以幫助。

編輯:-

我的評論是在我了解了machine.config中的autoconfig = true設置之前。 我進行了一些初步研究,發現這些設置適用於大多數應用程序。 因此,這些自定義設置僅在可能需要仔細考慮的優化的特殊情況下才需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM