SqlCommand Read () зависает случайным образом при возврате результатов на Windows Server 2016 / SQL Server 2016

#c# #.net #sql-server #sqlcommand

#c# #.net #sql-сервер #sqlcommand

Вопрос:

У меня есть пользовательское приложение, которое создает индекс Lucene на наших различных виртуальных машинах SQL Server, размещенных в Azure (оно выполняется локально на компьютере. Я знаю, что это не идеально, но причины). Эта программа годами безупречно работала на нескольких компьютерах.

Недавно мы создали новую виртуальную машину, используя Windows Server 2016 и SQL Server 2016. Теперь программа, похоже, зависает случайным образом при вызове reader.read() , пока я не завершу процесс. Раньше это никогда не было проблемой, но до этого версии Windows и SQL Server были в основном 2012 или ниже.

Когда я запускаю приложение на другом компьютере и указываю его на новую виртуальную машину SQL Server 2016, оно работает нормально. Когда я запускаю приложение локально на новой виртуальной машине и указываю на него само на себя, оно завершается сбоем. Также произойдет сбой, если я укажу его на ранее работающий SQL Server, пока он выполняется локально на новой виртуальной машине.

Это почти заставляет меня поверить, что это скорее проблема с Windows 2016, а не с SQL Server 2016.

Это просто использует SqlCommand класс практически самым простым способом. (Я просто печатаю это в качестве примера, это не фактический код).

 using (SqlConnection connection = new SqlConnection("connection String"))
{
     connection.Open();

     using (SqlCommand cmd =  new SqlCommand("query", connection)
     {
          connection.Open();

          using (var reader = cmd.ExecuteReader())
          {
               // freezes here randomly
               while (reader.read())     
               {
                   // do stuff
               }
           }
      }
}
  

Помимо зависания, единственное ожидание, которое я получаю от SQL Server, в основном от «Сетевого ввода-вывода». Это связано с тем, что SQL Server обработал строки из запроса, но приложение внезапно начинает сбоить, извлекая их.

Я перепробовал все, что мог придумать, поэтому, если у кого-нибудь есть какие-либо предложения, я был бы очень признателен.

Комментарии:

1. ха, это странно; это когда-нибудь заканчивается? или он зависает там навсегда?

2. у меня тайм-аут = 0, потому что это интенсивный запрос. Так что нет, время ожидания не истекло, но, вероятно, из-за этого. Тем не менее, я видел, как он зависает в первой строке и в 50 Тыс. строк. Это так случайно.

3. что . СЕТЕВАЯ версия, на которую вы ориентируетесь здесь, из любопытства?

4. Я пробовал 4.5, 4.5.1, 4.5.2, 4.6.1 и 4.6.2

5. я также пытался подключиться через общую память и tcp. Я также пробовал различные режимы совместимости. Та же проблема.