Назад | Перейти на главную страницу

Какой запрос SQL Server установит счетчик perfmon «Самое долгое время выполнения транзакции»> 0

Я пытаюсь решить, стоит ли отслеживать этот счетчик производительности: \\ SERVER \ MSSQL: Transactions \ Longest Transaction Running Time.

Итак, во время тестирования я попытался создать несколько длительных транзакций, но я не могу заставить этот счетчик читать что-либо больше нуля.

Но я не могу найти транзакцию или запрос, который сделает это. В качестве отправной точки я использовал пример запроса (вставка в транзакцию) в справке для DBCC OPENTRAN без везения.

Есть ли запрос, влияющий на этот счетчик?

Этот счетчик кажется немного медленным / работает и пропускает обновление, и я не совсем уверен, что он делает именно что предлагает его объяснение, однако я, кажется, добился наибольшего успеха, выполнив выбор из (большой таблицы) в открытой транзакции.

Как ни странно, выполнение отката, казалось, приводило к немедленному обновлению статистики счетчика, фиксация была менее эффективной, и иногда она обновлялась без них. Как я уже сказал, я не думаю, что этот счетчик - именно то, что мы думаем, и может быть просто приблизительным / средним.

С уважением, Марк @retracement

Это должно дать вам значение в этом счетчике. Очевидно, вам придется вручную остановить это.

SELECT '1' AS field1 INTO #tmp
BEGIN TRANSACTION
WHILE 1=1
BEGIN
    UPDATE #tmp SET field1=1
END
COMMIT TRANSACTION
DROP TABLE #tmp

Немного поздно на вечеринку. Я считаю, что документация была обновлена, чтобы объяснить ответ на этот вопрос за последние шесть лет, но, согласно моим тестам, это не совсем правильно.

Из Книги в Интернете: "Промежуток времени (в секундах) с момента начала транзакции, который был активен дольше, чем любая другая текущая транзакция. Этот счетчик показывает только активность когда база данных находится на уровне изоляции зафиксированного моментального снимка при чтении. Он не регистрирует никаких действий, если база данных находится на любом другом уровне изоляции.. "

Согласно моим тестам, это не совсем правильно. Если RCSI не включен, но вы разрешаете моментальный снимок, он покажет самое длительное время выполнения транзакции для запросов SNAPSHOT.

Другая сложность заключается в том, что счетчик обновляется только каждые 60 секунд.

По сути, это очень полезно для мониторинга, если что-то будет блокировать очистку хранилища версий, когда вы используете моментальный снимок или RCSI.