Иногда 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