簡體   English   中英

超時已過。 操作完成前超時時間已過或服務器未響應。 從數據庫中獲取記錄時

[英]Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. While fetching records from database

我的網站上有很多用戶(每天 2000000 個)在我的數據庫中,而從數據庫中獲取數據時,我遇到了上述錯誤。 我之前收到過“服務器不可用”錯誤,但現在看到連接超時錯誤。 我不熟悉這個 - 為什么會發生,我該如何解決?

   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at MySql.Data.Common.MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   --- End of inner exception stack trace ---
   at MySql.Data.Common.MyNetworkStream.HandleOrRethrowException(Exception e)
   at MySql.Data.Common.MyNetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.TimedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.MySqlStream.ReadFully(Stream stream, Byte[] buffer, Int32 offset, Int32 count)
   at MySql.Data.MySqlClient.MySqlStream.LoadPacket()
   at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
   at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId)
   at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
   at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)```

原因很多:

  1. 查詢執行時間過長。 隨着表的大小增加,由於糟糕的設計,查詢變得越來越慢。 檢查在執行特定查詢或表期間是否發生這種情況以縮小調查范圍
  2. 網絡問題。 這些是由於連接問題導致的錯誤。 網絡不穩定等。這應該與您的提供商或管理員聯系。
  3. 返回大量數據。 如果您嘗試將數百萬行返回給 c# 調用程序,則可能是獲取時間太長。 嘗試使用分頁或通過選擇頂部 X 行來限制行

如果沒有更多信息,例如失敗的查詢、所述表的數據庫架構和索引或服務狀態,則很難判斷。 以上是我見過的最常見的情況。

您還可以檢查死鎖和活鎖。

暫無
暫無

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

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