Вычислить время выполнения SQL-запроса?


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

Для этого я объявил переменную @start в моем SP и нашел разницу в конце, как показано ниже;

DECLARE @start_time DATETIME

SET @start_time = GETDATE()

-- my query
SELECT * FROM @search_temp_table

SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'TimeTaken'

Существует ли какой-либо другой простой и быстрый способ или одна строка запроса, с помощью которой мы можем узнать время запроса взят на казнь?

Я использую SQL Server 2005.

8 46

8 ответов:

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

Dim Duration as TimeSpan
Dim StartTime as DateTime = DateTime.Now

'Call the database here and execute your SQL statement

Duration = DateTime.Now.Subtract(StartTime)
Console.WriteLine(String.Format("Query took {0} seconds", Duration.TotalSeconds.ToString()))
Console.ReadLine()

Ну, если вы действительно хотите сделать это в вашей БД есть более точный способ, как указано в MSDN:

SET STATISTICS TIME ON

Вы также можете прочитать эту информацию из вашего приложения.

Я нашел это более полезным и простым

DECLARE @StartTime datetime,@EndTime datetime   
SELECT @StartTime=GETDATE() 
--Your Query to be run goes here--  
SELECT @EndTime=GETDATE()   
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in milliseconds]   

Пожалуйста, используйте

-- turn on statistics IO for IO related 
SET STATISTICS IO ON 
GO

И для расчета времени использовать

SET STATISTICS TIME ON
GO

Тогда он даст результат для каждого запроса . В окне сообщения рядом с окном ввода запроса.

declare @sttime  datetime
set @sttime=getdate()
print @sttime
Select * from ProductMaster   
SELECT RTRIM(CAST(DATEDIFF(MS, @sttime, GETDATE()) AS CHAR(10))) AS 'TimeTaken'    

Почему вы делаете это в SQL? По общему признанию, это показывает "истинное" время запроса, в отличие от времени запроса + времени, необходимого для перетасовки данных в разные стороны по сети, но это загрязняет код базы данных. Я сомневаюсь, что ваши пользователи будут заботиться - на самом деле, они, вероятно, скорее включают сетевое время, поскольку все это способствует времени, затраченному для них, чтобы увидеть страницу.

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

Вы можете использовать

SET STATISTICS TIME { ON | OFF }

Отображает количество миллисекунд, необходимых для разбора, компиляции и выполнения каждого оператора

Когда задано статистическое время, отображается статистика времени для оператора. При выключенном режиме статистика времени не отображается

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  

Попробуйте это

DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()

  SET @EndTime = GETDATE()
  PRINT 'StartTime = ' + CONVERT(VARCHAR(30),@StartTime,121)
  PRINT '  EndTime = ' + CONVERT(VARCHAR(30),@EndTime,121)
  PRINT ' Duration = ' + CONVERT(VARCHAR(30),@EndTime -@starttime,114)

Если это не поможет, попробуйте установить время статистики на