#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. Я также пробовал различные режимы совместимости. Та же проблема.