ارزیابی بهینه بودن کوئری در SQL Server

ارزیابی بهینه بودن کوئری در SQL Server

ارزیابی بهینه بودن کوئری در SQL Server

یکی از مهمترین دغدغه های برنامه نویسان بهینه بودن کوئری هایی است در SQL Server مینوستند. زمانی که صحبت از اندازه گیری بهینگی کوئری میشه باید قبل از هرچیزی بدانیم که اصولا چه چیزی را میخواهیم اندازه گیری کنیم و واحد اندازه گیری ما چه خواهد بود؟

خبر خوب اینه که نیازی نداریم تا یک واحد اندازه گیری جدید ابداع کنیم! در واقع SQL Server سه گزینه برای ارزیابی Performance کوئری ها در اختیارمون قرار میده

  1. Query cost
  2. Page reads
  3. 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 ها وجود ندارد.

مرتضی جنگجو

برنامه نویس fullstack با بیش از 14 سال سابقه کار و همکاری در توسعه و پیاده سازی نرم افزارهای تحت وب با تکنولوژی Net. در شرکتهای بزرگ ایرانی، هلندی، فنلاندی و ترکیه

شبکه های اجتماعی نویسنده

دیدگاه کاربران