
ارزیابی بهینه بودن کوئری در SQL Server
ارزیابی بهینه بودن کوئری در SQL Server
یکی از مهمترین دغدغه های برنامه نویسان بهینه بودن کوئری هایی است در SQL Server مینوستند. زمانی که صحبت از اندازه گیری بهینگی کوئری میشه باید قبل از هرچیزی بدانیم که اصولا چه چیزی را میخواهیم اندازه گیری کنیم و واحد اندازه گیری ما چه خواهد بود؟
خبر خوب اینه که نیازی نداریم تا یک واحد اندازه گیری جدید ابداع کنیم! در واقع SQL Server سه گزینه برای ارزیابی Performance کوئری ها در اختیارمون قرار میده
- Query cost
- Page reads
- Query execution time
1.Query Cost
هزینه کوئری یا Cost Query اغلب (نه در تمام اوقات) بهترین راه ارزیابی کوئری هاست. در واقع نوعی اندازه گیری داخلی در SQL Serverمحسوب میشه که شامل محاسبه تمامی منابعی است که برای اجرای کوئری از CPU و سایر منابع ورودی/خروجی I/O صرف میشه. از نظر تئوری هر چه مقدار Query Cost کمتر باشه، Performance کوئری بهتر است.
Query Cost یکی از بهترین روش های اندازه گیری بهینه بودن کوئری هاست. اما نباید برخی از محدودیت های Query Cost را نیز فراموش کنیم مثل اینکه نمیتونه هزینه user-define Function(UDF) ها، و یا CLR (Common language Runtime) هایی که در کوئری استفاده شده اند را محاسبه کنه درنتیجه هزینه کوئری هایی که شامل موارد فوق باشند کمتر از آنچیزی که واقعا هست نمایش داده میشود.
2.Page Reads
Page Reads به هر هشت کیلو بایتی که دردسترس موتور ذخیره سازی SQL Server قرار میگیره، تا کوئری شما اجرا بشه اطلاق میشود. با استفاده از دستور زیر میتونید از این ویژگی استفاده کنید
SET STATISTICTS IO ON
این دستور باعث میشه بعد از اجرای هر کوئری خروجی ای مانند نمونه زیر، در تب Message پنجره خروجی خود ببینید
Table 'Articles'. Scan count 1, logical reads 17, physical reads 1, read-ahead reads 15, lob logical reads 46, lob physical reads 16, lob read-ahead reads 0.
مجموع page read هایی که از حافظه خوانده شده 17 است. آیتمهای دیگر به شما میگن که چه مقدار از page read ها از هارد درایو سرور خوانده شده اند (physical read) یا از بافر (read-ahead)..
lob logical reads یا Larg objectهم اشاره به داده هایی داره که SQL آنها را خارج از Row ها ذخیره میکنه مثل داده هایی که از نوع nvarchar(max), ntext(max) و... هستند.
Page reads ها هم مانند Query Cost ها مشکل عدم محاسبه user-define Function(UDF) ها، و یا CLR (Common language Runtime) را دارند.
3.Query Executaion Time
متداول ترین راه ارزیابی کوئری ها زمان اجرا شدن آنهاست که با استفاده از دستور زیر میتوانید از این ویژگی استفاده کنید
Set Statisticts Time ON
دز محاسبه زمان اجرا کوئری مشکل محاسبه UDF و CLR ها وجود ندارد.
دیدگاه کاربران