После миграции нашего приложения c # с SQL Server 2008 на SQL Server 2017 мы поняли, что операции с интенсивным подключением значительно медленнее.
Я выделил код, который 10000 раз подключается к базе данных, и выполняю там простой запрос.Этот код выполняется около 5 секунд для SQL 2008 (или SQL 2012), но около 25 секунд для SQL 2017.
Код был выполнен для .NET 4.52 и протестирован на разных компьютерах с разными ОС, включая локальные исполнения на SQLСерверные машины (среди них два разных сервера SQL 2017).Я проверил встроенную и SQL Server аутентификацию.
Код для воспроизведения:
for (int i = 0; i < 10000; i++)
{
using (var con = new SqlConnection("server=hostname;Trusted_Connection=True;database=dbname"))
{
con.Open();
var cmd = new SqlCommand("SELECT 1", con);
// if I ommit this line, the code runs very fast
cmd.ExecuteScalar();
}
}
Обновления из комментариев:
- с использованием SQL Server версии 14.0.3223 (2017CU16)
- пробовал различные имена хостов:
hostname.domain
, 127.0.0.1
, (local)
- пытался применить определенный протокол SQL Server (TCP / IP, именованные каналы, общая память)
- первое выполнение после перезапуска службы SQL выполняется быстрее, дальнейшее выполнение выполняется так же медленно
- скорость прогресса не постоянна - код иногда выполняется быстрее, а затем снова медленнее (без другой нагрузки на SQL Server)
Есть идеи?