Execution Planها چگونه باید خوانده شوند؟

روش خواندن Execution Planها از سمت چپ به راست و از بالا به پایین است.

در جایی که در خواندن پلن به یک انشعاب می­رسید، از انتهای سمت راست بخش انشعاب و از بالا به پایین آن را دنبال کنید.

با این روش شما می­توانید ترتیب اجرای دستورات نمایش داده شده در Execution Plan را توسط SQL Server دریابید

تصویر زیر مراحل خواندن Execution Plan را برای کوئری زیر نشان می­دهد:

SELECT COUNT(LOGINID) FROM HumanResources.Employee

sqlserver

از آنجایی که این کوئری، یک کوئری بسیار ساده است، به صورت خطی و بدون هیچ گونه انشعابی ایجاد شده است و ترتیب خواندن آن از سمت راست به چپ خواهد بود.

تصویر زیر مراحل اجرای Execution Plan را برای کوئری زیر نشان میدهد:

SELECT th.TransactionID , th.ProductID, p.Name
FROM Production.TransactionHistory AS th
JOIN Production.Product AS p ON p.ProductID = th.ProductID
WHERE th.ProductID BETWEEN 400 AND 40

sqlserver

همانطور که در تصویر زیر  نشان داده شده است، به دلیل اینکه در این کوئری یک Join ساده استفاده شده،

یک انشعاب برای اتصال دو جدول ایجاد شده است. مراحل خواندن Execution Plan از راست به چپ و از بالا به پایین انجام شده است.

در اولین مرحله، عملیات Clustered Index Seek انجام شده است. اما در ادامه به دلیل اینکه به یک انشعاب رسیده است،

این انشعاب را دنبال کرده و از انتهای قسمت سمت راست  آن شروع به خواندن نموده است.

پس از پایان انشعاب، دوباره مسیر اصلی پیموده میشود و مرحله ی سوم و در نهایت چهارم انجام میگردد.

تصویر زیر مراحل اجرای Execution Plan را برای کوئری زیر نشان می دهد

SELECT wo.OrderQty ,wo.StockedQty ,wo.ScrappedQty ,
sr.Name AS ScrapReason , p.Name AS ProductName ,p.ProductID
FROM Production.WorkOrder AS wo
JOIN Production.Product AS p
ON p.ProductID = wo.ProductID
JOIN Production.ScrapReason AS sr
ON sr.ScrapReasonID = wo.ScrapReasonID
WHERE p.ProductID = 904

sqlserver

همانطور که در تصویر زیر  نشان داده شده است پایین ترین و سمت راست ترین عملگر

در پلن اجرایی نسبت به بالاترین و سمت راست ترین عملگر در پلن فاصله ی زیادی دارد.

اما با این حال روش خواندن این پلن نیز مانند پلن های قبلی خواهد بود

. به این ترتیب که خواندن از بالاترین و سمت راست ترین قسمت آغاز میشود.

و با رسیدن به هر انشعاب، باز هم بالاترین و سمت راست ترین قسمت آن انشعاب در نظر گرفته میشود و خواندن ادامه پیدا می کند.
همانطور که در تصویر زیر نشان داده شده است پایین ترین و سمت راست ترین عملگر

در پلن اجرایی نسبت به بالاترین و سمت راست ترین عملگر در پلن فاصله ی زیادی دارد.

اما با این حال روش خواندن این پلن نیز مانند پلن های قبلی خواهد بود.

به این ترتیب که خواندن از بالاترین و سمت راست ترین قسمت آغاز میشود.

و با رسیدن به هر انشعاب، باز هم بالاترین و سمت راست ترین قسمت آن انشعاب در نظر گرفته می شود و خواندن ادامه پیدا میکند.

 

sqlserver

آشنایی با علایم موجود در Execution Plan

هنگامی که یک Execution Plan را مشاهده میکنید متوجه علایم، خطوط، اعداد و موارد مختلفی در آن خواهید شد. قطعا برای آنکه بتوانید از این پلن اجرایی استفاده کنید لازم است تا با مواردی که در یک Execution Plan به شما نشان داده میشوند آشنا شوید. این موارد به چند دسته مختلف تقسیم میشوند:

– خطوط
– Data Retrive Operator
– Join Operators
– Aggregate Operator
– هزینه¬ها و Tooltipها

 

 

خطوط

در هر Execution Plan خطوطی برای نمایش مسیر جریان وجود دارد.

اگر نگاهی به چند پلن اجرایی مختلف بیندازید خواهید دید که تمام این خطوط، مسیر راست به چپ را نشان میدهند.

اما کارایی این خطوط تنها برای نمایش مسیر اجرا و خواندن پلن نیست. به ضخامت خطوط موجود در تصویر زیر نگاه کنید

 

sqlserver

 

تصویر زیر خطوط در این پلن دارای ضخامت های متفاوتی هستند.
همانطور که در این تصویر به وضوح دیده میشود، خطوط نمایش داده شده در این Execution Plan دارای ضخامت های متفاوتی هستند.

علت این تفاوت میزان داده ای است که از هر بخش خارج میشود.

هرچه ضخامت یک خط بیشتر باشد نشان دهنده ی آن است که میزان داده ی بیشتری در حال عبور از آن است

و هر چه این خط نازکتر باشد، نشان دهنده ی آن است که تعداد داده ی کمتری از آن عبور داده شده است.

برای اطمینان از این مساله کافی ست تا برای چند ثانیه نشانگر ماوس خود را روی خط نگهدارید تا Tooltip نشان داده شود.

در این Tooltip میزان داده ی در حال عبور از این خط به شما نشان داده می شود. تصاویر زیر  را ببینید.

در این تصاویر میزان داده ی عبوری از هر خط در بالای آن نشان داده شده است.

sqlserver

sqlserver

sqlserver

 

 

کافی است مقایسه ی بسیار ساده ای میان مقادیر نشان داده شده در تصاویر انجام دهید.

خواهید دید هرچه میزان داده ی خروجی بیشتر باشد ضخامت خطوط نشان داده شده بیشتر خواهد بود.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *