2012-07-26 9 views
99

निष्पादित करने में लगने वाले समय को मापें मेरे पास SQL ​​Server 2005 का उपयोग करके दो टी-एसक्यूएल प्रश्न हैं। मैं कैसे माप सकता हूं कि प्रत्येक व्यक्ति को चलाने में कितना समय लगता है?टी-एसक्यूएल क्वेरी

मेरे स्टॉपवॉच का उपयोग करके इसे काट नहीं आता है।

+2

क्या आप एसक्यूएल सर्वर प्रबंधन स्टूडियो का उपयोग कर रहे हैं? यह आमतौर पर प्रत्येक प्रश्न के लिए समाप्त समय प्रदर्शित करता है, यद्यपि केवल दूसरे संकल्प के साथ। यह संबंधित प्रश्न भी देखें: http://stackoverflow.com/questions/8247587/sql-server-management-studio-how-to-get-execution-time-down-to-milliseconds – mellamokb

+0

@mellamokb: मैं एसएसएमएस का उपयोग कर रहा हूं। दूसरा संकल्प बहुत मोटा है। – TheMoot

+0

@LittleBobbyTables: मैं एसएसएमएस में चल रहा हूं। मैं स्टॉप का उपयोग कैसे करूं? – TheMoot

उत्तर

100

घटनाओं के बीच "विलुप्त समय" को मापने के लिए एक सरल दृष्टिकोण केवल वर्तमान दिनांक और समय को पकड़ना है।

एसक्यूएल सर्वर प्रबंधन स्टूडियो

SELECT GETDATE(); 
SELECT /* query one */ 1 ; 
SELECT GETDATE(); 
SELECT /* query two */ 2 ; 
SELECT GETDATE(); 

में बीता बार की गणना करने के लिए, आप चर में उन दिनांक मानों हड़पने सकता है, और DateDiff समारोह का उपयोग करें:

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; 

सिर्फ एक तरीका है कि। आप एसक्यूएल प्रोफाइलर का उपयोग कर प्रश्नों के लिए भी समय बीत सकते हैं।

+0

मैंने एसक्यूएल प्रोफाइलर दस्तावेज़ की तलाश की कि यह कैसे करें, लेकिन ऐसा दस्तावेज़ नहीं मिला जिसे पढ़ने के घंटों की आवश्यकता नहीं थी। क्या आप "डमीज के लिए प्रोफाइलर" लिंक की सिफारिश कर सकते हैं? – TheMoot

+0

@TheMoot मुझे पता है कि मुझे देर हो चुकी है लेकिन एमएसडीएन लिंक आपके "[विषय] डमीज़ के लिए" आवश्यकताओं के लिए बिल्कुल सही हैं :)। इस पर एक नज़र डालने का प्रयास करें [कैसे करें: एसक्यूएल प्रोफाइलर का उपयोग करें] (https://msdn.microsoft.com/en-us/library/ff650699.aspx) –

+0

क्या किसी और को एसक्यूएल प्रबंधन स्टूडियो में इसका उपयोग करने में कोई समस्या है? मैंने परीक्षण के लिए संग्रहीत प्रक्रिया में लगभग 15 प्रश्नों के सेट में इसे जोड़ा और इसे चलाने के लिए बहुत लंबा रास्ता लगता है। मैंने 7 मिनट में रद्द कर दिया और सभी टाइमर जोड़े गए केवल 2 मिनट थे। तो मुझे लगता है कि कुछ रिटर्न टेक्स्ट कैश समस्या है या शायद कई लोगों के लिए सभी डेटिफ़िफ़ की गणना करने में बहुत लंबा समय लगता है। –

170

आप जवाब से ऊपर की तुलना में एक अधिक सटीक मापन चाहते हैं:

set statistics time on 

-- Query 1 goes here 

-- Query 2 goes here 

set statistics time off 

परिणाम संदेश विंडो में हो जाएगा।

अद्यतन (2015/07/29):

लोकप्रिय अनुरोध करके, मैं एक कोड का टुकड़ा है कि आप समय के लिए नहीं बल्कि उसके घटकों की तुलना में एक पूरी संग्रहीत प्रक्रिया रन का उपयोग कर सकते, लिखा है।

-- 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) 
+2

बस एक नोट यह है कि यह फ़ंक्शन उपलब्ध नहीं है यदि डेटाबेस तक आपकी पहुंच केवल पढ़ने योग्य है। 'सेट सांख्यिकी समय का उपयोग करने के लिए, उपयोगकर्ताओं को ट्रांजैक्ट-एसक्यूएल कथन निष्पादित करने के लिए उचित अनुमतियां होनी चाहिए। SHOWPLAN अनुमति की आवश्यकता नहीं है। से: http://technet.microsoft.com/en-us/library/ms190287.aspx – Rob

+4

क्या कोई ऐसा तरीका है जहां मैं पूरे समय देख सकता हूं कि संग्रहीत प्रक्रिया को निष्पादित करने की आवश्यकता है? अभी मैं बहुत सारे माप देखता हूं। – Rookian

+1

@ रुकेयन, मैंने आपके साथ मदद करने के लिए उत्तर में कुछ कोड जोड़ा। –

8
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] 

You can also See this solution

+6

यह समय नैनोसेकंड में देता है। मिलसेकंड्स DATEDIFF (एमएस, @ स्टार्टटाइम, @ एंडटाइम) – d512

6

और भी बेहतर, इस की औसत मापेंगे: हालांकि यह केवल समय पिछले रन द्वारा उठाए गए देता है, वहाँ sys.dm_exec_procedure_stats द्वारा लौटाए अतिरिक्त आँकड़े भी मूल्य का हो सकता है आपकी क्वेरी के पुनरावृत्तियों! एक और सटीक पढ़ने के लिए बढ़िया।

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 
+2

मैंने 'माइक्रोसॉन्डर' को 'मिलिसेकोन्द' में बदल दिया और हर बार जब मैंने 'स्टार्ट' और 'टी 0 घोषित' के बीच लाइनों के बाद डाली को साफ़ किया ... ' ' चेकप्वाइंट; डीबीसीसी ड्रॉप्लेनबफर; डीबीसीसी फ्रीप्रोकैच; '। आकर्षण की तरह काम करता है और वास्तव में जो मैं खोज रहा था। +1 –

+1

मैं एक संग्रहीत प्रक्रिया में वृद्धिशील प्रदर्शन tweaks गेज करने के लिए yr snippet का उपयोग कर रहा है, बहुत चालाक! – JayJay

+0

दोनों धन्यवाद। मैं अब लंबे समय से एसक्यूएल कर रहा हूं, यह एक क्विर्की भाषा है। लेकिन एक बार जब आप जानते हैं कि कंक क्या हैं और उन्हें अपने लाभ के लिए कैसे स्पिन करें, तो यह बहुत एक्सडी में मदद करता है – HumbleWebDev

संबंधित मुद्दे