2009-11-24 79 views
1

我有一臺「Cron服務」,我在生產服務器上運行了一年半以上。嘗試連接時MySQL.Data:「對象引用未設置爲對象的實例」

這是一個常規的windows服務,每分鐘連接到數據庫,在一張桌子上檢查是否有什麼事要做,如果是的話,是否這樣做。這是一個網站的服務器,用處不大,所以大部分時間服務完全閒置。

幾個月前,這項服務開始拋出以下異常和死亡:

MESSAGE: Object reference not set to an instance of an object. 
SOURCE: MySql.Data 
TARGETSITE: MySql.Data.MySqlClient.Driver CheckoutConnection() 
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.CheckoutConnection() 
    at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() 
    at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() 
    at MySql.Data.MySqlClient.MySqlPool.GetConnection() 
    at MySql.Data.MySqlClient.MySqlConnection.Open() 
    at DBA.Connect() in D:\xxx\DBA.vb:line 21 
    at CronService.TaskMailings.OnExecute() in D:\xxx\TaskMailings.vb:line 54 
    at CronService.CronTask.ThreadExecute() in D:\xxx\CronTask.vb:line 99 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

異常顯然是從MySQL庫裏面來了。另外,我的函數調用它是非常簡單的:

Public Shared Function Connect() As MySqlConnection 
     Dim strConnString As String = WebConfigurationManager.AppSettings("ConnectionString") 
     Dim DBConn As New MySqlConnection(strConnString) 
     DBConn.Open() 
     Return DBConn 
    End Function 

在哪裏我打電話DBA.Connect()(CronService.TaskMailings.OnExecute)與「使用」聲明中這樣的功能,所以連接正在關閉,這個不應該是一個連接被打開並耗盡的問題(儘管它可能,如果MySQL庫內有bug的話)。

這是我使用該服務的連接字符串:

server=localhost;port=13306;uid=xxx;pwd=xxx;database=xxx;Pooling=True;charset=utf8; 

任何想法可能是怎麼回事? 最奇怪的部分是,在它開始出現藍屏之前,這已經運行了一年多了,我相信,加載到服務器的變化不足以證明它是一個負載問題。


編輯:一些死了的時代,它給這個其他錯誤消息:

MESSAGE: error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. 
SOURCE: MySql.Data 
TARGETSITE: MySql.Data.MySqlClient.Driver GetConnection() 
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.GetConnection() 
    at MySql.Data.MySqlClient.MySqlConnection.Open() 
    atDBA.Connect() in D:\xxx\DBA.vb:line 21 

雖然該錯誤信息是很清楚,就像我之前提到的,我們發佈的所有連接,所以這不應該發生。有任何想法嗎?

+0

你檢查了事件查看器嗎? – CheeseConQueso 2009-11-24 21:47:54

+0

是的。除了我自己的應用程序發佈的錯誤報告(詳細信息是我上面發佈的內容)和「應用程序」日誌中的條目之外,沒有任何內容表明我的進程拋出未處理的異常並死亡。 – 2009-11-24 21:56:00

+0

它是100%的時間還是偶爾會死? – 2009-11-25 05:02:42

回答

2

我意識到這是一個老問題,不過問題在於mysql.data.dll

在此對所測試的什麼版本?

我目前在5.2.2.0中看到這個問題(並且它不會在5.0.1.0中發生)。

我會建議降級5.0.1.0或升級到最新,看看它是否仍然存在。

相關問題