異常詳細資料: System.InvalidOperationException: 內部串連致命錯誤

來源:互聯網
上載者:User

 

異常詳細資料: System.InvalidOperationException: 內部串連致命錯誤。

系統:
某政府部門業務系統。
環境:
win2003 企業版 sp2,sql2000 企業版 sp4,iis6,.netframework(2003系統內建)
機器:
1號機器Dell 1800 Cpu TM 2.8G 記憶體2.5G SATA硬碟
2號機器Dell 2800 Cpu TM 2.8G 記憶體1G SCSI硬碟
3號機器Hp Cpu E5430 2.66G*2 記憶體4G,SCSI硬碟
業務量:
市+縣區共9個資料庫,每個資料庫大概500個使用者。並發訪問大概在30-50左右。
系統經曆過3個階段。
一、剛開始使用1號機器,資料庫和web程式都在1號機上。1年系統正常,稍稍有點慢。串連容易逾時。
二、後來增加2號機器,web程式在1號機,資料庫在2號機。1年半系統正常,執行長時間匯出報表會出現逾時。
三、2星期前採購3號機器,這是把web程式和資料庫都放在3號機器上,所有軟體都是相同的。
這是頻繁出現 異常詳細資料: System.InvalidOperationException: 內部串連致命錯誤。
大概在半天,業務量多的時候幾個小時就來一次,重啟伺服器後正常。
查看資料庫記錄檔,裡面有 “可能記憶體不夠” 這樣的錯誤提示。此時查看系統,sql進程佔用1.3G,還有1.5G空閑實體記憶體。

問題:這就奇怪了,程式一點沒有變動,軟體也是相同的,包括win2003,sql2000,補丁。
難道增加記憶體也有錯。

我也也在google上搜尋過,很多人說是資料庫連接使用了沒有關閉的原因。
首先我檢查過程式,基本都關閉了,其次,系統運行快3年了,記憶體少時都沒有問題,難道記憶體多了,反而有問題。
還有,我查看sql企業管理器-管理-當前資訊-進程資訊的時候, 報記憶體不足的資訊,但是這是系統還有1.5G的實體記憶體。

最近試了下解決的方法,主要有以下幾個:
----------------------------------------------------
如果sql server 與 IIS伺服器位於同一台伺服器,web.config 裡的資料庫連接串中IP地址應為(local),
而不能為原生實際靜態IP地址,否則傻傻的 ado.net 就暈了。
檢查類似位置:
<add key="connectionString" value="Server=210.68.68.10;Database=abc;User ID=abc;Password=abc" />
其中 Server的IP地址改成 (local)如下:
<add key="connectionString" value="Server=(local);Database=abc;User ID=abc;Password=abc" />

修改了之後,感覺此方法無效。
----------------------------------------------------
修改sql 的使用記憶體,把原來的4G改為1G

修改之後,目前還沒有問題,已經使用了7個小時
不過這是治標不治本的辦法,系統的優勢沒有發揮出來
----------------------------------------------------
安裝win2003和sql2005 64位版本
完全解決問題
----------------------------------------------------
分析原因:
win2003和sql2000 32位版本對4G記憶體支援不好,在達到4G記憶體之前就掛了,從而無法釋放資源,修改1G之後。
也許程式中會有少量沒有釋放的資料庫連接。但是我覺得sql應該會自動回收此資源。
64位版本是預設支援4G以上記憶體的,NND,記憶體大也是一種負擔。

特註:

1.32位的win2003,預設不支援4G記憶體,要修改boot.ini檔案來支援4G以上的記憶體

2.根據微軟專家介紹,通過使用3GB開關會導致資料庫存在不穩定,如果想使用大記憶體就直接使用64bit的系統和安裝64bit的SQL Server。
對於32bit機器而言,單個進程一般記憶體使用量到1.6~1.7GB就差不多了

3.網上有報告稱SqlServer2000對多CPU的支援有問題,即使打補丁到sp4也還是不夠的,需要繼續打補丁到KBxxxx。具體多少我忘了,你可以查一下你的EventLog,應該會有這個相關的SqlServer異常的。(估計你已經升級資料庫了,沒機會了)

順便說一下:
1做web,2做資料庫的方法可能是錯誤的。因為就我所知,資料庫伺服器除了對硬碟效能敏感外,還對記憶體數量敏感。
此外,既然你有多台資料庫,同時原來就支援Web和資料庫分開的方式,那麼把資料庫和Web都放在3,也不是特別好的方法。因為兩者肯定會有競爭,例如對磁碟讀寫的競爭,或者還有IIS Log和DB備份的磁碟剩餘空間競爭。分開問題少一點,而且有的時候問題比較好判斷——看那一台伺服器資源狀況出問題了就知道了,例如CPU高的是哪一台。
4.以前使用的是sql身分識別驗證,需要使用者名稱和密碼,web.config裡的data source寫的是ip地址,現在用的是windows身分識別驗證,所以以前的使用者名稱和密碼都無效了,要改成User ID=機器名稱;Integrated Security=True;" providerName="System.Data.SqlClient",就可以用了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.