Вычислить время выполнения 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 ответов:
Мы отслеживаем это из кода приложения, просто чтобы включить время, необходимое для установления / закрытия соединения и передачи данных по сети. Это довольно прямолинейно...
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)
Если это не поможет, попробуйте установить время статистики на