স্কেল সার্ভার 2005 ব্যবহার করে আমার কাছে দুটি টি-এসকিএল কোয়েরি রয়েছে each প্রত্যেকটি চালাতে কত সময় লাগে তা আমি কীভাবে পরিমাপ করতে পারি?
আমার স্টপওয়াচ ব্যবহার করে এটি কাটবে না।
স্কেল সার্ভার 2005 ব্যবহার করে আমার কাছে দুটি টি-এসকিএল কোয়েরি রয়েছে each প্রত্যেকটি চালাতে কত সময় লাগে তা আমি কীভাবে পরিমাপ করতে পারি?
আমার স্টপওয়াচ ব্যবহার করে এটি কাটবে না।
উত্তর:
ইভেন্টগুলির মধ্যে "অতিবাহিত সময়" পরিমাপের একটি সরল পদ্ধতি হল কেবলমাত্র বর্তমান তারিখ এবং সময় গ্রহণ করা।
এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওতে
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;
এটি কেবল একটি পদ্ধতির। আপনি এসকিউএল প্রোফাইলার ব্যবহার করে প্রশ্নের জন্য সময় অতিবাহিত করতে পারেন।
SET @t1 = GETDATE();
আমার ক্যোয়ারির শীর্ষে থাকি এবং তারপরে SET @t2 = GETDATE();SELECT 'NOTE 1',DATEDIFF(millisecond,@t1,@t2) AS elapsed_ms;SET @t1 = GETDATE();
কোয়েরির মধ্যে বিচার্য পয়েন্টগুলিতে আটকান ("নোট 1" যথাযথভাবে সম্পাদনা করে)। পরিমাপের পরিবর্তে বাছাইকারীদের ব্রেকপয়েন্ট হিসাবে বিবেচনা করা আপনার পদ্ধতির কাছে শব্দার্থগতভাবে অভিন্ন (যদিও @ টি 1 এর চূড়ান্ত সেটটি উদ্দীপক, এবং এটি ধরে নিয়েছে যে সমস্ত প্রশ্নের পরিমাপ করা উচিত)। এটি নিখুঁতভাবে একটি মানসিক / টাইপিং অপটিমাইজেশন (ক্যোরির প্রতি দুটি পেস্টের চেয়ে ব্রেকপয়েন্টে একটি পেস্ট)।
আপনি যদি উপরের উত্তরের চেয়ে আরও সঠিক পরিমাপ চান:
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.
থেকে: টেকনিকট.মাইক্রোসফট /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]
আর একটি উপায় হল একটি এসকিউএল সার্ভার অন্তর্নির্মিত বৈশিষ্ট্যটি ব্যবহার করা 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;
। মোহন এর মতো কাজ করে এবং ঠিক আমি যা খুঁজছিলাম was +1
সময়গুলি পেতে এবং আপনার ক্যোয়ারীটি কতটা দক্ষ তা জানতে প্রদর্শন করার জন্য পরিসংখ্যান আইকনে ক্লিক করুন এবং তারপরে কোয়েরিটি চালান