ฉันมีข้อความค้นหา t-sql สองรายการโดยใช้ SqlServer 2005 ฉันจะวัดระยะเวลาที่ใช้ในการรันแต่ละรายการได้นานแค่ไหน
ใช้นาฬิกาจับเวลาของฉันไม่ได้ตัด
ฉันมีข้อความค้นหา t-sql สองรายการโดยใช้ SqlServer 2005 ฉันจะวัดระยะเวลาที่ใช้ในการรันแต่ละรายการได้นานแค่ไหน
ใช้นาฬิกาจับเวลาของฉันไม่ได้ตัด
คำตอบ:
วิธีง่าย ๆ อย่างหนึ่งในการวัด "เวลาที่ผ่านไป" ระหว่างเหตุการณ์คือเพียงแค่คว้าวันที่และเวลาปัจจุบัน
ใน Studio จัดการเซิร์ฟเวอร์ SQL
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;
นั่นเป็นเพียงแนวทางเดียว นอกจากนี้คุณยังสามารถรับเวลาที่ผ่านไปสำหรับการสืบค้นโดยใช้ SQL Profiler
SET @t1 = GETDATE();
ที่ด้านบนของแบบสอบถามของฉันแล้ววางSET @t2 = GETDATE();SELECT 'NOTE 1',DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;SET @t1 = GETDATE();
ที่จุดที่ฉลาดในแบบสอบถาม (แก้ไข "หมายเหตุ 1" อย่างเหมาะสม) การปฏิบัติต่อสิ่งที่เลือกเป็นเบรกพอยต์แทนที่จะเป็นการวัดแบบ semantically เหมือนกับวิธีการของคุณ (แม้ว่าชุดสุดท้ายเป็น @ t1 จะปลอมและนี่ถือว่าการสืบค้นทั้งหมดควรถูกวัด) นี่คือการเพิ่มประสิทธิภาพจิต / การพิมพ์อย่างแท้จริง (หนึ่งวางต่อจุดหยุดแทนที่จะวางสองครั้งต่อแบบสอบถาม)
หากคุณต้องการการวัดที่แม่นยำกว่าคำตอบข้างต้น:
set statistics time on
-- Query 1 goes here
-- Query 2 goes here
set statistics time off
ผลลัพธ์จะอยู่ในหน้าต่างข้อความ
อัปเดต (2015-07-29):
ตามคำขอยอดนิยมฉันได้เขียนข้อมูลโค้ดที่คุณสามารถใช้ในการดำเนินการตามขั้นตอนที่เก็บไว้ทั้งหมดแทนที่จะเป็นส่วนประกอบ แม้ว่านี่จะส่งคืนเฉพาะเวลาที่ใช้โดยการเรียกใช้ครั้งล่าสุดเท่านั้น แต่มีสถิติเพิ่มเติมที่ส่งคืนโดยsys.dm_exec_procedure_stats
ที่อาจมีค่า:
-- 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)=@ProcName AND
(OBJECT_SCHEMA_NAME(object_id,database_id)=@SchemaName OR @SchemaName IS NULL) AND
(DB_NAME(database_id)=@DbName OR @DbName IS NULL)
To use SET STATISTICS TIME, users must have the appropriate permissions to execute the Transact-SQL statement. The SHOWPLAN permission is not required.
จาก: technet.microsoft.com/en-us/library/ms190287.aspx
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(MS,@StartTime,@EndTime) AS [Duration in millisecs]
อีกวิธีหนึ่งคือใช้คุณลักษณะในตัวของ SQL Server ที่ตั้งชื่อClient Statistics
ซึ่งสามารถเข้าถึงได้ผ่านเมนู> แบบสอบถาม> รวมสถิติไคลเอ็นต์รวมไคลเอนต์สถิติ
คุณสามารถเรียกใช้แต่ละแบบสอบถามในหน้าต่างแบบสอบถามแยกและเปรียบเทียบผลลัพธ์ที่ได้รับในClient Statistics
แท็บเพียงข้างMessages
แท็บ
ตัวอย่างเช่นในภาพด้านล่างแสดงว่าเวลาเฉลี่ยที่ผ่านไปเพื่อรับการตอบกลับจากเซิร์ฟเวอร์สำหรับหนึ่งในแบบสอบถามของฉันคือ 39 มิลลิวินาที
คุณสามารถอ่านทั้งหมด 3 วิธีสำหรับการซื้อเวลาดำเนินการในที่นี่ คุณอาจจำเป็นต้องแสดงEstimated Execution Plan
ctrlLเพื่อการสอบสวนเพิ่มเติมเกี่ยวกับการสืบค้นของคุณ
ยิ่งไปกว่านั้นสิ่งนี้จะวัดค่าเฉลี่ยของการทำซ้ำ n ข้อความค้นหาของคุณ! เหมาะสำหรับการอ่านที่แม่นยำยิ่งขึ้น
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
ไปMILLISECOND
และทุกครั้งเพื่อล้างแคชฉันแทรกบรรทัดต่อไปนี้ระหว่างbegin
และ:declare @t0 ...
CHECKPOINT; DBCC DROPCLEANBUFFERS; DBCC FREEPROCCACHE;
ทำงานเหมือนมีเสน่ห์และสิ่งที่ฉันกำลังมองหา +1
คลิกที่ไอคอนสถิติเพื่อแสดงและเรียกใช้แบบสอบถามเพื่อรับการกำหนดเวลาและเพื่อทราบว่าแบบสอบถามของคุณมีประสิทธิภาพเพียงใด