ورود ثبت نام

ورود به حساب کاربری

نام کاربری *
رمز ورود *

ایجاد حساب کاربری

گزینه های * دار الزامی می باشند.
نام *
نام کاربری *
رمز ورود *
تائیدیه رمز ورود *
نشانی پست الکترونیک *
تائیدیه پست الکترونیک *

آموزش نحوه خواندن EXECUTION PLAN - مقدمه

در آموزش معرفی execution plan و کاربرد آن با مفهوم execution plan در sql server، اجزای تشکیل دهنده، نحوه فعال سازی نمایش، آیکون ها و کاربرد آن به خوبی آشنا شدیم. در قسمت ابتدایی آن آموزش، به عنوان یک مقایسه بین فلوچارت و execution plan، اشاره کردیم که نحوه خواندن execution plan دارای روش خاصی است و به سادگی خواندن یک فلوچارت نیست. در واقع با خواندن execution plan تولید شده برای یک کوئری، مراحل اجرا شدن آن کوئری در sql server را متوجه می شویم و عملگرهایی که sql server جهت اجرای واقعی کوئری ما استفاده کرده است را مشاهده می کنیم. پس با شناخت execution plan و آموزش نحوه خواندن execution plan، شما دو ابزار کاملا کاربردی جهت بررسی میزان کارایی و بهینه سازی کوئری ها در اختیار دارید. با توجه به تجربه شخصی و بر اساس وفور کاربردهای عملی این دو مورد، مطالعه دقیق این دو آموزش (معرفی execution plan و نحوه خواندن آن) را به شما پیشنهاد می کنم.

در ابتدای آموزش نحوه خواندن execution plan با پلن هایی ساده شروع خواهیم کرد و در ادامه پلن هایی با آیکن های بیشتر و پیچیده را بررسی خواهیم کرد تا در مینه خواندن execution plan به مهارت مورد نیاز برسید. لازم است اشاره کنم که این آموزش به عنوان یک پیش نیاز برای آموزش های آتی، بویژه مجموعه افزایش سرعت و کارایی(Performance Tuning) محسوب می شود.


آموزش نحوه خواندن EXECUTION PLAN 

 خواندن execution plan در دو جهت اصلی، راست به چپ و بالا به پایین انجام می شود:

how-read-execution-plan-direction

 زمانی که execution plan کوئری ما به صورت خطی است، باید آن را از راست به چپ بخوانیم. در مثال ساده زیر، execution plan مربوط به یک کوئری جهت استخراج مشخصات کارمندان را با مرتب سازی کد ملی مشاهده می کنید:

how-read-execution-plan-sample1

همانطور که مشاهده می کنید execution plan بالا به صورت خطی است(هیچ انشعاب و یا فلش به سمت بالا و پایین ندارد) و گفتیم که برای خواندن این گونه پلن ها، از سمت راست شروع می کنیم و به سمت چپ جلو می رویم:

how-read-execution-plan-numbered

 نحوه خواندن execution plan بالا را با هم دنبال می کنیم. در ابتدا sql server عملیات scan(بررسی همه رکوردها) را روی جدول Employees انجام می دهد. در ادامه با توجه به اینکه لازم است، رکوردها در زمان نمایش، بصورت مرتب شده براساس کد ملی باشند، یک عملیات sort نیز انجام می شود و در پایان، رکوردهای مرتب شده بر اساس کد ملی نمایش داده می شوند. پس با این مثال ابتدایی، علاوه بر آشنایی با خواندن execution plan متوجه شدید که sql server برای اجرای کوئری ما، از یکسری عملگر استفاده میکنه، مثلا برای استخراج رکوردهای جدول، از Table Scan استفاده کرده است(در اینجا) و یا برای مرتب سازی، از Sort استفاده کرده و ... 

پس نحوه خواندن execution plan در حالتی که بدون انشعاب باشد(خطی) از راست به چپ انجام می شود. اگر تعداد آیکن ها هم بیشتر از مثال بالا باشد باز هم از همین روش استفاده می کنیم:

how-read-execution-plan-sample2

و اما  نحوه خواندن execution plan در حالتی که دارای فلش های به سمت پایین/بالا(انشعاب) است، به صورت زیر است:

      1. از اولین آیکن در سمت راست-بالا، شروع به خواندن(شماره گذاری) کرده و به سمت چپ حرکت می کنیم. **عدد 1- در شکل**

      2. با رسیدن به هر انشعاب(به سمت پایین)، در امتداد فلش به سمت پایین حرکت می کنیم، با رسیدن به ابتدای فلش، مجدداً به انتهای سمت راست می رویم و مرحله 1 را تکرار میکنیم. **عدد 3- در شکل**

      3. با رسیدن به هر انشعاب(به طرف بالا)، در صورتی که انشعاب به سمت پایین وجود نداشته باشد، به سمت بالا حرکت می کنیم و مرحله 1 را تکرار میکنیم. **عدد 6- در شکل**

      4. با تکرار مراحل 1 و 2 و3 تمام آیکن های(عملگرها)  execution plan را بررسی(شماره گذری) می کنیم.

در مثال زیر، یک کوئری جهت استخراج لیست پرسنل از جدول Employees، به همراه محل اشتغال آن ها از جدول Department اجرا کرده ایم:


how-read-execution-plan-sample4

 نحوه خواندن execution plan بالا را با هم دنبال می کنیم. اولین آیکن سمت راست-بالا، Clustered Index Scan است که با عددnumber-1 شماره گذاری می کنیم و به سمت چپ حرکت می کنیم، با رسیدن به انشعاب، با توجه به اینکه امتداد این انشعاب(فلش) به سمت پایین است، به سمت پایین حرکت می کنیم تا به ابتدای فلش برسیم. در ادامه به انتهای سمت راست می رویم و به آیکن Clustered Index Seek می رسیم و آن را با عدد number-2 شماره گذاری می کنیم و به سمت چپ حرکت می کنیم. با رسیدن به انشعاب، از آنجایی که انشعاب به سمت پایینی وجود ندارد، به سمت بالا حرکت می کنیم و ... پس برای تولید خروجی، لیست کارمندان به همراه محل اشتغال آن ها، در ابتدا هر رکورد جدول Employees با رکوردهای جدول Department مقایسه و سپس جوین(Nested Loops) و نهایتاً نمایش داده می شود(Select) و این دقیقاً، مراحل انجام الگوریتم Nested Loops است که در آموزش join چیست به آن اشاره شد.

 خوب تا اینجا، قوانین لازم برای خواندن execution plan را یاد گرفتیم. در ادامه، دو execution plan، با تعداد آیکن ها و پیچیدگی بیشتر را به همراه شماره گذاری آن ها می بینیم. شکل اول با نمایش مراحل شماره گذاری:how-read-execution-plan-sample5:

how-read-execution-plan-sample6

how-read-execution-plan-sample7

 شکل دوم با شماره گذاری قسمتی از execution plan، ادامه شماره گذاری را به عنوان یک تمرین انجام دهید:

how-read-execution-plan-sample8


آموزش نحوه خواندن EXECUTION PLAN - جمع بندی

با توجه به اهمیتی که یادگیری نحوه خواندن EXECUTION PLAN، در رفع مشکلات کارایی و کندی سرعت اجرای کوئری ها دارد، در این آموزش سعی شد با استفاده از مثالها و بیان این مراحل به صورت گام به گام، به بهترین نحوه ممکن، این مهارت به شما آموزش داده شود. به شما توصیه می کنم همواره execution plan کوئری هاتون رو بررسی کنید، با این کار به تدریج، در طراحی کوئری دقت بیشتری صرف خواهید کرد، چرا که نحوه اجرا و تبدیل دستورات کوئری به عملگرهای سمت sql server رو به خوبی متوجه خواهید شد و دستورات با کارایی بالا رو از دستورات پرهزینه شناسایی خواهید کرد.

همانطور که در مثال ها مشاهده کردید با بررسی execution plan، مراحل و عملیات فیزیکی/واقعی که جهت اجرا شدن یک کوئری در sql server لازم است نمایش داده می شود. سعی کنید به تدریج و با همین روش، کوئری ها را تحلیل و بررسی کنید تا در بهینه سازی و رفع مشکلات آن ها که در آموزش های آتی به آن ها پرداخته می شود به سرعت پیش برویم.

 

 

نوشتن دیدگاه


تصویر امنیتی
تصویر امنیتی جدید