یکی از وظایف اصلی مدیر و یا توسعه دهنده یک بانک اطلاعاتی، نوشتن کدهای T-SQL و اندازهگیری عملکرد آنها میباشد. ابزارهای مختلفی برای انجام این کار وجود دارد، چه آنهایی که در خود SQL Server بصورت محلی وجود دارند و چه آنهایی که توسط شرکتهای ثالث ارائه میشوند. اما مسئله مهمی که باید در نظر بگیرید چگونگی نوشتن یک پرس و جو (Query) و اندازه گیری کارآیی آن میباشد و اینکه باید روی چه مواردی متمرکز شد. در اکثر مواقع گرفتن زمان اجرای یک پرس و جو تا اندازهای خوب میباشد. یکی از مواردی که باید روی آن متمرکز شد منابع استفاده شده توسط سرور میباشد، درحالیکه زمان اجرای پرس وجو به پارامترهای دیگری همچون بار سرور نیز بستگی دارد. علاوه بر استفاده از پروفایلر و نقشه اجرای کوئری (Execution Plan) ، میتوانید از SET STATISTICS TIME نیز استفاده نمایید.
SET STATISTICS TIME تنظیمی است که برای اندازه گیری منابع مورد نیاز اجرای یک پرس و جو به شما کمک میکند. SET STATISTICS TIME آمار مربوط به زمان تجزیه و تحلیل (Parse)، کامپایل و اجرای هر دستور در یک پرس و جو را نمایش میدهد. راههای مختلف اندکی برای مقایسه آماری دو پرس و جو و انتخاب بهترین آنها برای استفاده وجود دارند.
برای روشن کردن این تنظیم دو راه وجود دارد. ابتدا اینکه از دستور Set برای روشن و خاموش کردن استفاده نمایید و یا اینکه از طریق Query Analyzer اقدام به انجام این کار نمایید.
SET STATISTICS TIME ON
برای اینکه بتوانید آمارهای این تنظیمات را مشاهده کنید میبایست قبل از اجرای پرس و جو تنظیم مورد نظر را روشن نمایید. در نظر داشته باشید که با روشن کردن این تنظیم، برای تمامی پرس و جوهای مربوط به آن جلسه (Session) روشن خواهد ماند تا زمانیکه آنرا خاموش نمایید.
SELECT ProductID, StartDate, EndDate, StandardCost
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
با اجرای دستورات بالا خروجی آن بصورت زیر میباشد:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
(269 row(s) affected)
SQL Server Execution Times:
CPU time = 1 ms, elapsed time = 2 ms.
زمان صرف شده برای اجرای یک کوئری به دو بخش تقسیم میشود:
زمان کامپایل و تجزیه و تحلیل (parse and compile time): زمانیکه یک کوئری را برای اجرا به SQL Server ارائه میدهید، SQL Server آنرا از نظر خطای نحوی بررسی مینماید و بهینه ساز یک نقشه بهینه
را برای اجرا تولید مینماید. اگر به خروجی نگاه کنید، زمان پردازش (CPU time) و زمان سپری
شده (elapsed time) را نشان میدهد. منظور از زمان پردازش زمان واقعی صرف
شده روی پردازنده میباشد و زمان سپری شده اشاره به زمان تکمیل شدن عملیات کامپایل
و تجزیه و تحلیل میباشد. تفاوت بین زمان پردازش و زمان سپری شده ممکن است زمان
انتظار در صف برای گرفتن پردازنده و یا انتظار برای تکمیل عملیات IO باشد.
زمان اجرا (Execution Times): این زمان اشاره به زمان سپری شده برای تکمیل اجرای نقشه کامپایل شده دارد. زمان پردازش اشاره به زمان واقعی صرف شده روی پردازنده دارد و زمان سپری شده نیز مجموع زمان صرف شده تا تکمیل اجرای دستور که شامل زمان انتظار برای تکمیل عملیات IO و زمان صرف شده برای انتقال خروجی به کلاینت میباشد، دارد. زمان پردازش میتواند به عنوان مبنایی برای اندازهگیری کارآیی مورد استفاده قرار بگیرد. این مقدار در اجراهای مختلف تفاوت چندانی با هم ندارند جز اینکه کوئری و یا دادهها تغییر نمایند. توجه نمایید که زمان براساس میلی ثانیه میباشد. زمان سپری شده نیز به فاکتورهایی مانند بارگذاری روی سرور، بارگذاری IO، و پهنای باند بین سرور و کلاینت وابسته میباشد. بنابراین همیشه زمان پردازش به عنوان مبنایی برای اندازهگیری کارایی استفاده میشود.
در این بخش به بررسی SET STATISTICS TIMEدر SQL Server پرداختیم. در بخش بعدی به بررسی SET STATISTICS IOبرای اندازه گیری کارایی پرس و جوها از نظر میزان استفاده IO خواهیم پرداخت.