Код: Выделить всё
SELECT col1, col2, col3, col4, col5
FROM table
WHERE key = @key
Выполнение этого запроса постоянно занимает полсекунды. в коде из приложения .NET Framework 4.8 с использованием Microsoft.Data.SqlClient (я пробовал переключиться на System.Data.SqlClient, но не заметил никаких изменений в производительности).
Напротив, в этом приложении есть запросы длиной во многие тысячи строк, которые выполняются за десятые или тысячные доли секунды. Таким образом, это не все запросы, а лишь несколько избранных, и все затронутые запросы представляют собой одну таблицу, очень простые выборки из очень маленьких таблиц.
Более того, это затрагивает только пользователей Windows 11 Pro. , пользователи Windows 10 Pro этого не испытывают.
Моей первой мыслью было, что это должен быть план объяснения, поэтому я очистил кеш и запустил клиенты на двух разных машинах: 11 и 10 — они оба использовали один и тот же план (в Windows 11 это невозможно воспроизвести в SSMS, я также проверил и сопоставил настройки строки подключения с параметром arithabort и т. д., без изменений, тот же план)Запустил трассировку, и запрос со стороны сервера говорит, что он будет выполнен за 0–2 тысячных, но клиент все равно занимает полсекунды или больше.
Я установил еще один экземпляр SQL Server 2022 на компьютере с Windows 11 Pro, восстановил на нем резервную копию проблемной базы данных и не смог воспроизвести проблему. Установил последнее накопительное обновление на обе машины, перезапустил обе, в поведении никаких изменений.
Проблемная база данных размещена на сервере Windows 2019, который за последние несколько месяцев получил ряд обновлений. . К сожалению, области кода, в которых возникают эти проблемы, используются реже, поэтому я не могу достаточно хорошо изолировать их на временной шкале, чтобы предположить, могло ли обновление повлиять на них или нет.
Я выделил запрос в отдельное тестовое приложение, построил строку подключения так же, проблема повторяется. Судя по трассировке сервера, начало и конец выполнения запроса совпадают с точностью до тысячной доли секунды. На стороне приложения я ставлю секундомер перед выполнением запроса, останавливаюсь сразу после него и затем записываю его. Постоянно вижу полсекунды.
Все это сказано, если я изменю запрос на
Код: Выделить всё
SELECT *
FROM table
WHERE key = @key
И здесь я должен повторить: тот же план выполнения используется машиной, которая выполняет это за тысячные доли секунды. Трассировка сервера говорит, что это мгновенно. Восстановленная копия базы данных на другом сервере не демонстрирует такого поведения, и подавляющее большинство других запросов, гораздо более сложных и в больших таблицах, работают нормально - и это не зависит от конкретного исполняемого файла, поскольку это воспроизводится в другом тесте. Программы. Версии базы данных совпадают, проблем с подключением нет, поведение одинаковое.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ndows-10-p