解決考試系統高並發資料載入不正確問題,考試系統載入

來源:互聯網
上載者:User

解決考試系統高並發資料載入不正確問題,考試系統載入
  背景:

   現在這版考試系統分為學生考試端和後台管理端。同一登陸頁,學生輸入學號、密碼進入考試介面,管理員輸入使用者名稱、密碼進入後台管理介面。平時沒有學生考試時,後台管理介面學院下拉框可以正確的從資料庫讀取並載入資料,但有學生考試時,後台管理介面學院下拉框擷取的資料有時為空白,有時為髒資料。

   我們所做的嘗試:   1、再現資料載入不正確情境

   用LoadRunner壓力測試程式類比255人線上考試的過程,發現當考試人數達到50人時,後台管理介面開始出現上述資料載入不正確問題。

   2、驗證資料庫是否產生了死結

   我們在207伺服器IIS上發布兩套相同的考試系統A、B,A、B考試系統訪問同一資料庫,用LoadRunner類比255人訪問A系統,當A系統出現資料載入不正確問題時,用B系統登入後台管理,每次重新整理資料都能正確載入。因此得出結論,不是資料庫的問題,不然B系統也會出現資料載入不正確問題。

   3、驗證IIS分配給應用程式的虛擬記憶體和專用記憶體是否太小

   我們用LoadRunner類比255人訪問考試系統,當系統出現資料載入不正確問題時,在IIS的應用程式集區對考試系統進行回收操作,系統資料正確載入,一直重新整理,過段時間資料又不能正常載入。我們在IIS的應用程式集區把考試系統的虛擬記憶體和專用記憶體設定為最大值,重新整理頁面仍然出現資料載入不正確問題。

   4、最佳化SQLHelper類

   在SQLHelper中用到了很多Connection、SqlCommand、SqlDataAdapter、SqlDataReader,原來是放在Using中執行,為了確保上述操作在執行完後釋放記憶體,又添加了try、catch、finally,在finally關閉SqlDataReader、SqlDataAdapter、SqlCommand、Connection,但結果資料仍是載入不正確。

   5、在資料庫連接串添加MultipleActiveResultSets=true屬性

   由於在報的黃頁中有一個錯誤提示是“There is already an open DataReader associated with this Command which must be closed first”,所以嘗試在資料庫連接串添加MultipleActiveResultSets=true屬性,允許在單個串連上執行多重的資料庫查詢或預存程序,但結果資料仍是載入不正確。

   6、把資料庫的串連池最大值由1200改為500

   做了上述5步操作,問題還是沒有解決,於是嘗試著換個思路,資料庫連接池是不是設定的太大了,把最大值由1200改為了500,問題解決。

   我們可以在百度百科查一下資料庫連接池的定義:資料庫連接池在初始化時將建立一定數量的資料庫連接放到串連池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,串連池都將一直保證至少擁有這麼多的串連數量。串連池的最大資料庫連接數量限定了這個串連池能佔有的最大串連數,當應用程式向串連池請求的串連數超過最大串連數量時,這些請求將被加入到等待隊列中。

   最小串連數:是串連池一直保持的資料庫連接,所以如果應用程式對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;

   最大串連數:是串連池能申請的最大串連數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。

   最小串連數與最大串連數相差太大:那麼最先的串連請求將會獲利,之後超過最小串連數量的串連請求等價於建立一個新的資料庫連接。不過,這些大於最小串連數的資料庫連接在使用完不會馬上被釋放,它將被放到串連池中等待重複使用或是空閑逾時後被釋放。

   原來資料庫連接池最大為1200,最小為300。系統初始化時建立300個資料庫連接,之後如果串連數超過300,則建立新的串連,可實際系統運行過程中並未用過這麼多的資料庫連接,造成資料庫連接(是一種關鍵的有限的昂貴的資源)的浪費。

   問題雖然解決,但仍然有一個疑問:“為什麼資料庫連接池最大值設定太大會造成資料載入不正確”?

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.