Пожалуйста, объясните мне следующее наблюдение:
У меня есть следующий фрагмент кода T-SQL, который я запускаю из SSMS:
BEGIN TRAN
SELECT COUNT (*)
FROM m
WHERE m.[x] = 123456
or m.[y] IN (SELECT f.x FROM f)
SELECT COUNT (*)
FROM m
WHERE m.[x] = 123456
or m.[y] IN (SELECT f.x FROM f)
COMMIT TRAN
Запрос занимает около двадцати секунд. У меня нет других запросов пользователей на сервере.
В этих обстоятельствах я ожидал бы, что счетчик производительности «MSSQL $ SQLInstanceName: Transactions \ Longest Transaction Running Time» будет постоянно расти до значения 20, а затем быстро падать. Вместо этого он увеличивается примерно до 12 в течение двух секунд, а затем колеблется между 12 и 14 в течение всего запроса, после чего снова падает.
Согласно документации MS, счетчик измеряет «отрезок времени (в секундах) с момента начала транзакции, который был активен дольше, чем любая другая текущая транзакция». Но, видимо, это не так. Что дает?
Проверьте DMV, в которых это работает, и посмотрите, что сообщает время ЦП для запроса. Я предполагаю, что это соответствует.