У меня есть специальное приложение, которое создает индекс 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 обработал строки в запросе, но приложение внезапно перестало извлекать их.
Я перепробовал все, что мог придумать, поэтому, если у кого-то есть предложения, я был бы очень признателен.