Что может вызвать длительное время last_optimize_duration для простого запроса в SQL Server (Azure) - PullRequest
0 голосов
/ 28 мая 2019

Иногда SQL Azure вызывает простой запрос внутри хранимой процедуры, который может занять много времени.После долгих исследований я отследил проблему до last_optimize_duration в хранилище запросов, показав 20+ секунд.

Я переписал запрос несколькими способами, упростил его, использовал индекс с индексом, попытался вызвать другие хранимые процедуры из основного.Похоже, что сам запрос выполняется быстро в 100% случаев, ИСКЛЮЧАЯ иногда, когда система перекомпилирует его.Конечно, если я делаю это в SSMS, он быстро компилируется и запускается.

CREATE PROC[dbo].spLogHatesMe(
    @CID[VARCHAR](200),
    @LogType VARCHAR(50) = NULL
)

AS
SELECT *
    FROM dbo.Log
WHERE CID = @CID
AND LogType = @LogType;
GO

Также обратите внимание, что таблица журнала имеет индекс CID и LogType.

Я ожидаю, что время оптимизации будет аналогично всем другим компиляциям в диапазоне 1000-5000 микросекунд.Не «25913462», который был последней продолжительностью, которую я имел.Ни у одного другого запроса такой же тип проблемы отсутствует.

Таблица журнала - это таблица журнала, которая в основном вставляется.Для одной конкретной задачи нам нужно оглянуться назад и прочитать одно из значений.Примерно 20-25 вставок на 1 чтение.

Я использую этот запрос из хранилища запросов, чтобы получить время компиляции:

SELECT TOP 100 * 
FROM   sys.query_store_plan AS Pl
       INNER JOIN sys.query_store_query AS Qry ON Pl.query_id = Qry.query_id
       INNER JOIN sys.query_store_query_text AS Txt ON Qry.query_text_id = Txt.query_text_id
WHERE Qry.is_internal_query=0
ORDER BY Pl.last_compile_start_time desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...