SqlServer 2005 kullanarak iki t-sql sorgum var. Her birinin kaç kez çalıştırılacağını nasıl ölçeriz?Bir t-sql sorgusu yürütmek için gereken süreyi ölçer
Kronometremi kullanmak onu kesmiyor.
SqlServer 2005 kullanarak iki t-sql sorgum var. Her birinin kaç kez çalıştırılacağını nasıl ölçeriz?Bir t-sql sorgusu yürütmek için gereken süreyi ölçer
Kronometremi kullanmak onu kesmiyor.
Olaylar arasındaki "geçen sürenin" ölçülmesine yönelik basit bir yaklaşım, geçerli tarih ve saati almaktır. SQL Server Management Studio
SELECT GETDATE();
SELECT /* query one */ 1 ;
SELECT GETDATE();
SELECT /* query two */ 2 ;
SELECT GETDATE();
yılında
Eğer değişkenlere bu tarih değerlerini yakalamak olabilir, geçen süreleri hesaplamak ve DATEDIFF işlevini kullanmak için:DECLARE @t1 DATETIME;
DECLARE @t2 DATETIME;
SET @t1 = GETDATE();
SELECT /* query one */ 1 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
SET @t1 = GETDATE();
SELECT /* query two */ 2 ;
SET @t2 = GETDATE();
SELECT DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;
sadece bir yaklaşımdır. Ayrıca, SQL Profiler kullanarak sorgular için geçen süreleri alabilirsiniz.
Sql Profiler belgesini bunun nasıl yapılacağını araştırdım ama okuma saatlerine ihtiyaç duymadan doktora bulamadım. "Dummies için Profiler" bağlantısını önerebilir misin? – TheMoot
@TheMoot Biliyorum geç kaldım ama MSDN bağlantıları "[Konu] Dummies için" ihtiyaçlarınız için mükemmel :). Buna bir göz atmaya çalışın [Nasıl Yapılır: SQL Profiler Kullanılır] (https://msdn.microsoft.com/en-us/library/ff650699.aspx) –
Başkalarının bunu sql yönetim stüdyosunda kullanma sorunları oldu mu? Test için saklı bir prosedürde yaklaşık 15 sorguya ekledim ve çalışması çok uzun sürüyor. 7 dakikada iptal ettim ve eklenen tüm zamanlayıcılar sadece 2 dakika oldu. Bu yüzden bazı geri dönüş metin önbellek sorunu olduğunu düşünüyorum ya da belki çok fazla için tüm tarihçeleri hesaplamak için çok uzun sürüyor. –
Yukarıdaki cevap daha doğru bir ölçüm isterseniz:
set statistics time on
-- Query 1 goes here
-- Query 2 goes here
set statistics time off
sonuç Mesajları pencere olacaktır.
Güncellemesi (2015/07/29): Yoğun istek üzerine
, sana bileşenlerinden çok kendisine zaman bütün bir saklı yordam çalıştırmak kullanabileceğiniz bir kod parçacığını yazdım.
-- Use the last_elapsed_time from sys.dm_exec_procedure_stats
-- to time an entire stored procedure.
-- Set the following variables to the name of the stored proc
-- for which which you would like run duration info
DECLARE @DbName NVARCHAR(128);
DECLARE @SchemaName SYSNAME;
DECLARE @ProcName SYSNAME=N'TestProc';
SELECT CONVERT(TIME(3),DATEADD(ms,ROUND(last_elapsed_time/1000.0,0),0))
AS LastExecutionTime
FROM sys.dm_exec_procedure_stats
WHERE OBJECT_NAME(object_id,database_id)[email protected] AND
(OBJECT_SCHEMA_NAME(object_id,database_id)[email protected] OR @SchemaName IS NULL) AND
(DB_NAME(database_id)[email protected] OR @DbName IS NULL)
Sadece veritabanına erişiminiz salt okunursa, bu işlev kullanılamaz. 'SET İSTATİSTİKLERİ ZAMANINDA, kullanıcıların Transact-SQL deyimini yürütmek için uygun izinlere sahip olması gerekir. SHOWPLAN izni gerekli değildir. ' from: http://technet.microsoft.com/en-us/library/ms190287.aspx – Rob
Saklı bir yordamın yürütmesi gereken tüm zamanı görebildiğim bir yol var mı? Şu anda çok sayıda tek ölçüm görüyorum. – Rookian
@Rookian, Size yardımcı olmak için cevaba bir kod ekledim. –
DECLARE @StartTime datetime
DECLARE @EndTime datetime
SELECT @StartTime=GETDATE()
-- Write Your Query
SELECT @EndTime=GETDATE()
--This will return execution time of your query
SELECT DATEDIFF(NS,@StartTime,@EndTime) AS [Duration in millisecs]
daha iyi You can also See this solution
Bu, nanosaniye cinsinden zaman verir. Milisaniye DATEDIFF (MS, @ StartTime, @ EndTime) – d512
, bu ortalamasını ölçecek: Bu sadece son dönemde aldığı zaman döndürür rağmen, yine de faydalı olabilir sys.dm_exec_procedure_stats
tarafından döndürülen ek durum yer alacak Sorunuzun tekrarı! Daha doğru bir okuma için harika.
declare @tTOTAL int = 0
declare @i integer = 0
declare @itrs integer = 100
while @i < @itrs
begin
declare @t0 datetime = GETDATE()
--your query here
declare @t1 datetime = GETDATE()
set @tTotal = @tTotal + DATEDIFF(MICROSECOND,@t0,@t1)
set @i = @i + 1
end
select @tTotal/@itrs
"MICROSECOND" öğesini "MILLISECOND" olarak değiştirdim ve "begin" ile "declare @ t0 ..." arasında aşağıdaki satırları eklediğim her zaman önbelleği temizledim: ' CHECKPOINT; DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE; '. Cazibe ve tam olarak aradığım şey gibi çalışır. +1 –
Kayıtlı bir prosedüre kademeli performans ayarlaması yapmak için yr snippet'i kullanıyorum, çok kaygan! – JayJay
İkinize de teşekkürler. Uzun zamandır sql yapıyorum, ilginç bir dil. Ama ne zaman bir tuhaflık olduğunu ve onları avantajınıza göre nasıl döndürdüğünüzü bilirseniz, çok fazla XD yardımcı olur. – HumbleWebDev
Sql Server Management Studio kullanıyor musunuz? Genelde her sorgu için geçen süreyi, sadece ikinci çözünürlükte de olsa gösterir. Ayrıca bu soruya bakınız: http://stackoverflow.com/questions/8247587/sql-server-management-studio-how-to-get-execution-time-down-to-milliseconds – mellamokb
@mellamokb: ssms kullanıyorum. İkinci çözünürlük çok kaba. – TheMoot
@LittleBobbyTables: ssms içinde koşuyorum. bir durağı nasıl kullanırım? – TheMoot