Студія управління SQL Server, як скоротити час виконання до мілісекунд


220

Коли я надсилаю пакет (наприклад, виконую запит) у SSMS, я бачу час, необхідний для виконання у рядку стану. Чи можна налаштувати SSMS для відображення часу запиту з роздільною здатністю мілісекунд?

Ось смуга, про яку я говорю, із розділом, що цікавиться, обведеним червоним кольором:

введіть тут опис зображення


3
Не дуже відповіді на ваше запитання, але ви можете використовувати SQL Server Profiler (інструмент реєстрації), щоб перевірити тривалість вашого запиту. Тривалість вимірюється в мілісекундах.
AGuyCalledGerald

Відповіді:


66

Я боровся з цим, поки не знайшов цього ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Крім того, якщо ви відкриєте вікно "Властивості", ви можете знайти якийсь магічний "Час проходження з'єднання", який може дати вам час виконання ... Сподіваюся, це допоможе ...


18
Частина про вікно "Властивості" - це справді відповідь на цей потік. «Минулий час» сидить там і дивиться тобі в обличчя.
Ерік

І я зараз встановлюю цю відповідь як прийняту відповідь, оскільки вона є найбільш правильною.
Майкл

363

Що ви хочете зробити, це:

set statistics time on

-- your query

set statistics time off

Це матиме результат, який виглядає приблизно так у вашому вікні повідомлень:

Часи виконання SQL Server: час процесора = 6 мс, минулий час = 6 мс.


1
Але це поміщає часові позначки у вікно Повідомлення, а це означає, що мені потрібно вручну перевернути його після виконання запиту. Також результати, здається, не мають сенсу, наприклад: час процесора = 1357 мс, минулий час = 169 мс. Як це складати, навіть якщо у мене є 8 ядер з гіперточенням (тобто 16 віртуальних)?
Майкл Голдштейн

2
@MichaelGoldshteyn щодо того, чому ваш час процесора більший, це тому, що у вас багатоядерний або гіперточений процесор.

25
@MichaelGoldshteyn 1357/8 = 169.625. Збіг?
Dan J

3
@DanJ, ​​БД не робить все з пам'яті. Часто втягується введення-виведення, і введення-виведення означає більш тривалий час.
Майкл Голдштейн

9
@binki Ви праві, що мій коментар 1555 днів був неточним.
benizi

125

Увімкніть статистику клієнта , виконавши одну з наступних дій:

  • Меню: Запит> Включити статистику клієнта
  • Панель інструментів: натисніть кнопку (поруч із Включити фактичний час виконання)
  • Клавіатура: Shift-Alt-S

Тоді ви отримуєте нову вкладку, яка записує терміни, дані IO та кількість рядків тощо для (до) останніх 10 виконань (плюс середні показники!):

введіть тут опис зображення


Це те саме, що відповідь @Ymagine First з листопада 2012 року. Дивіться відповідь вище ...
Богдан Богданов

На цьому сайті (за іронією долі) на той час була помилка SQL, тому я витяг ключову інформацію з кешу Google і опублікував як нову відповідь. Я не мав на меті красти кредит, і, можливо, я мав би замість цього редагувати оригінальну відповідь.
NickG

Насправді, здається, у мене недостатньо точок повторень для редагування питань, тому, ймовірно, я цього не робив.
NickG

3
БЮР одиниці статистики часу в мілісекундах: brentozar.com/archive/2012/12/…
congusbongus

17

Щоб отримати час виконання як змінну у вашій процедурі:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

І бачте це

Вимірювання продуктивності запиту: "Вартість запиту на план виконання" порівняно з "Зайнятий час"


1
Datepart NS являє собою наносекунд, протягом мілісекунд використовуйте MS
Мілан Матейка

12

Я після того ж робив і наткнувся на наступне посилання, яке було блискучим:

http://www.sqlserver.info/management-studio/show-query-execution-time/

Він показує три різні способи вимірювання продуктивності. Все добре для власних сил. Я обрав таке:


ДЕКЛАРАЦІЯ @ DATETIME Time1

ДЕКЛАРАЦІЯ @ DATETIME Час2

SET @ Time1 = GETDATE ()

- Вставте запит сюди

SET @ Time2 = GETDATE ()

ВИБІР DATEDIFF (MILLISECOND, @ Time1, @ Time2) AS Elapsed_MS


Це покаже результати вашого запиту, а також кількість часу, необхідне для його виконання.

Сподіваюсь, це допомагає.


Я виявив, що непостійний, іноді показує час, а іноді просто показує 0.
RMati

2

Я не знаю про розширення інформаційної панелі.

Але ви можете отримати терміни, встановлені за замовчуванням для всіх запитів, що відображаються на вкладці "Повідомлення".

Перебуваючи у вікні запиту, перейдіть до пункту меню запитів, виберіть "параметри запиту", потім виберіть "розширений" у групі "Виконання" і поставте прапорець "встановити час статистики" / "встановити IO статистики". Потім ці значення відображатимуться в області повідомлень для кожного запиту без необхідності вводити та вимикати встановлені статистичні дані.

Ви також можете використовувати Shift + Alt + S, щоб увімкнути статистику клієнтів у будь-який час


0

Ви можете спробувати цей код:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.