Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách làm cho thời gian chờ của SqlConnection nhanh hơn

Có vẻ như tất cả các trường hợp gây ra sự chậm trễ kéo dài đều có thể được giải quyết nhiều nhanh hơn bằng cách thử kết nối ổ cắm trực tiếp như sau:

foreach (string svrName in args)
{
   try
   {
      System.Net.Sockets.TcpClient tcp = new System.Net.Sockets.TcpClient(svrName, 1433);
      if (tcp.Connected)
         Console.WriteLine("Opened connection to {0}", svrName);
      else
         Console.WriteLine("{0} not connected", svrName);
      tcp.Close();
   }
   catch (Exception ex)
   {
      Console.WriteLine("Error connecting to {0}: {1}", svrName, ex.Message);
   }
}

Tôi sẽ sử dụng mã này để kiểm tra xem máy chủ có phản hồi trên cổng SQL Server hay không và chỉ cố gắng mở kết nối nếu có. Tôi đã nghĩ (dựa trên kinh nghiệm của những người khác) rằng sẽ có độ trễ 30 giây ngay cả ở mức này, nhưng tôi nhận được thông báo rằng máy "đã chủ động từ chối kết nối" ở mức này ngay lập tức.

Chỉnh sửa: Và nếu máy không tồn tại, nó cũng cho tôi biết điều đó ngay lập tức. Không có độ trễ 30 giây nào mà tôi có thể tìm thấy.

Chỉnh sửa: Máy đã vào mạng nhưng chưa tắt thì tôi đoán là mất 30 giây. Tuy nhiên, các máy có tường lửa nhanh hơn bị lỗi.

Chỉnh sửa: Đây là mã được cập nhật. Tôi cảm thấy đóng một ổ cắm sạch hơn là hủy bỏ một chuỗi:

static void TestConn(string server)
{
   try
   {
      using (System.Net.Sockets.TcpClient tcpSocket = new System.Net.Sockets.TcpClient())
      {
         IAsyncResult async = tcpSocket.BeginConnect(server, 1433, ConnectCallback, null);
         DateTime startTime = DateTime.Now;
         do
         {
            System.Threading.Thread.Sleep(500);
            if (async.IsCompleted) break;
         } while (DateTime.Now.Subtract(startTime).TotalSeconds < 5);
         if (async.IsCompleted)
         {
            tcpSocket.EndConnect(async);
            Console.WriteLine("Connection succeeded");
         }
         tcpSocket.Close();
         if (!async.IsCompleted)
         {
            Console.WriteLine("Server did not respond");
            return;
         }
      }
   }
   catch(System.Net.Sockets.SocketException ex)
   {
      Console.WriteLine(ex.Message);
   }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi một thủ tục được lưu trữ dưới dạng quyền của người dùng khác

  2. 5 Nguyên tắc truy vấn và cú pháp SQL để giám sát cơ sở dữ liệu tốt hơn

  3. Cách áp dụng màu sắc trong đầu ra powershell

  4. Có sự kết hợp giữa LIKE và IN trong SQL không?

  5. Tìm các ngày Thứ Hai giữa 2 ngày