Я использую Microsoft SQL Server 2016 с пакетом обновления 2 (SP2-CU6) (13.0.5292.0) на виртуальной машине с 4 виртуальными ЦП с max degree of parallelismустановленным значением 2и cost threshold for parallelismустановленным значением 50.
По утрам, при попытке отобразить примерный план выполнения для запроса SELECT TOP 100 , я сталкиваюсь с массовым ожиданием, и операция рендеринга оценочного плана занимает минуты, часто раз в диапазоне 5-7 минут. Опять же, это не фактическое выполнение запроса, это всего лишь процесс отображения оценочного плана выполнения .
sp_WhoIsActiveпокажет либо PAGEIOLATCH_SHждет, либо LATCH_EX [ACCESS_METHODS_DATASET_PARENT]ждет, и когда я запустил сценарий Пола Рэндала WaitingTasks.sql во время операции, он показывает CXPACKETожидания с рабочими потоками, показывающими PAGEIOLATCH_SHожидания:
* поле описания ресурса = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen
Рабочие потоки, по-видимому, переносят всю statsтаблицу в память (как эти номера страниц, так и последующие номера страниц, показанные из запроса Пола Рэндала, возвращаются к кластерному ключу для statsтаблицы). Как только план возвращается, он в основном мгновенный на оставшуюся часть дня, даже после того, как я вижу большую часть statsистощения таблицы из кэша с оставшимися только различными записями (которые, я полагаю, были извлечены из-за операций поиска из похожих запросов).
Я ожидал бы такого начального поведения, если запрос фактически выполнялся с планом, в котором использовались операторы SCAN, но почему он делает это при оценке планов выполнения только для получения оператора SEEK, как показано в плане, связанном выше? Что я могу сделать (кроме выполнения этого оператора до рабочего дня, чтобы мои данные должным образом кэшировались), чтобы улучшить производительность здесь? Я предполагаю, что пара покрывающих индексов будет полезна, но действительно ли они гарантируют какие-либо изменения в поведении? Я должен работать в рамках некоторых ограничений окна хранения и обслуживания, и сам запрос генерируется из решения поставщика, поэтому любые другие предложения (помимо лучшей индексации) будут приветствоваться на этом этапе.

