SQL Server Management Studio, как сократить время выполнения до миллисекунд

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/

Кроме того, если вы откроете окно «Свойства», вы можете найти какое-то волшебное «Истекшее время соединения», которое может дать вам некоторое время выполнения ... Надеюсь, это поможет ...

Ymagine First
источник
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. Стечение обстоятельств?
Дан Джей
3
@ DanJ, ​​БД не делает все из памяти. Часто ввод / вывод задействован, и ввод / вывод означает более продолжительное время.
Михаил Гольдштейн
9
@binki Вы правы, что мой комментарий на 1,555 дней был неточным.
Бенизи
125

Включите клиентскую статистику , выполнив одно из следующих действий:

  • Меню: Запрос> Включить статистику клиента
  • Панель инструментов: нажмите кнопку (рядом с «Включить фактическое время выполнения»)
  • Клавиатура: Shift-Alt-S

Затем вы получаете новую вкладку, в которой записываются данные о времени, данных ввода-вывода, количестве строк и т. Д. Для (до) последних 10 исключений (плюс средние значения!):

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

NickG
источник
Это то же самое, что и ответ @Ymagine First от Nov'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
Milan Matějka
12

Я последовал за тем же и наткнулся на следующую блестящую ссылку:

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

Он показывает три разных способа измерения производительности. Все хорошо для собственных сил. То, что я выбрал, было следующим:


ОБЪЯВИТЬ @ Time1 DATETIME

ОБЪЯВИТЬ @ Time2 DATETIME

SET @ Time1 = GETDATE ()

- Вставьте запрос здесь

SET @ Time2 = GETDATE ()

ВЫБРАТЬ DATEDIFF (МИЛЛИСЕКУНД, @ Time1, @ Time2) КАК Elapsed_MS


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

Надеюсь это поможет.

J-Man
источник
Я нашел это непостоянным, иногда показывает время, а иногда просто показывает 0.
RMati
2

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

Но вы можете установить тайминги по умолчанию для всех запросов, отображаемых на вкладке «Сообщения».

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

Вы также можете использовать 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
Rohitkumar
источник