PDA

View Full Version : مقاله: آشنایی با Execution Plan



حمیدرضاصادقیان
دوشنبه 03 اسفند 1388, 23:43 عصر
سلام دوستان. تصمیم دارم در چند مقاله به طور کامل به جزئیات Execution plan بپردازم . در این مقالات از کتابهای مختلف و سایتهای مختلف استفاده شده است.
در پایان منابعش رو کامل ذکر میکنم.
از اساتید محترم هم تقاضا دارم مارو در این بحث یاری کنند.
امیدوارم بتونم به خوبی مطلب رو ارائه کنم تا دوستان استفاده کنند.

حمیدرضاصادقیان
دوشنبه 03 اسفند 1388, 23:47 عصر
درس اول :
اصول Execution Plan:( EP)
یک EP نتیجه راهکار Query Optimizer(QO) را برای حساب کردن موثرترین راه جهت فراهم آوردن درخواست ارائه شده توسط Query که شما ارائه دادید به سادگی توضیح می دهد.
EP به شما میگوید یک Query چطور اجرا خواهد شد، یا چگونه اجرا شده است. بنابراین ، این ابزار اصلی اشکال زدایی یک Dba برای بدست آوردن بازدهی ضعیف یک کوئری می باشد.
به جای حدس زدن اینکه چرا یک Query معین هزاران Scan را فراهم میکند ، I/O شما را به سقف میزان آن می رساند ، شما میتوانید Ep را برای مشخص کردن دقیق قطعه کد SQL که مشکل ایجاد کرده است به کار ببرید.
به طور مثال ممکن است یک Table scan (جستجوی کلی جدول) داشته باشیم در صورتیکه با داشتن یک index مناسب ، میتوان دقیقا به اطلاعات مورد نیاز دست پیدا کرد. تمامی این موارد در EP نمایش داده شده است.
زمانی که یک Query به سرور ارسال می شود، چه اتفاقی می افتد ؟
زمانی که شما یک Query را به یک دیتابیس ارسال می کنید ، یک تعداد عملیات بر روی سرور ، جهت کار بر روی این Query اختصاص داده می شود.
هدف تمامی عملیات ها ، مدیریت سیستم است به طوریکه در یک زمان مناسب اطلاعات را به شما برگرداند یا آنها را ذخیره کند ، به طوریکه یکپارچگی اطلاعات حفظ شود.
این عملیات به طور کلی بر روی تمامی Query های ارائه شده به سیستم اجرا می شود.
به طور کلی عملیات مربوط به T-SQL به دو دسته کلی تقسیم می شوند:
- عملیاتی که در موتور رابطه ای ( Relational Engine) رخ میدهد.
- عملیاتی که در موتور ذخیره سازی (Storage engine) رخ می دهد.
در موتور رابطه ای ، Query ابتدا تجزیه شده و سپس توسط QO انجام می شود، که یک EP ایجاد میکند . EP ایجاد شده در یک فرمت باینری به موتور ذخیره سازی ارسال می شود، که در این موتور برای بازیابی اطلاعات یا بروز کردن اطلاعات مشخص شده به کار میرود. موتور ذخیره سازی جایی است که عملیاتی مانند قفل کردن ، نگهداری ایندکس و رخ دادن Transaction ها انجام می شود.



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

حمیدرضاصادقیان
سه شنبه 04 اسفند 1388, 11:10 صبح
تجزیه کوئری :
زمانی که شما یک دستور sql را به SQL Server ارسال میکنید ، موتور رابطه ای(Relational Engine) ، اولین مکانی است که این دستور ارسال می شود.
به محض ورود دستور (Sql String) ، توسط روندی به نام تجزیه دستور(Query Parsing) کنترل می شود که دستور فوق صحیح باشد. خروجی تجزیه کننده ، یک درخت تجزیه یا درخت Query است. درخت تجزیه ، مراحل منطقی لازم جهت اجرای کوئری ارسال شده را فراهم میکند.
اگر دستور ارسال شده از نوع DML نباشد ، Optimize نخواهد شد. زیرا ، به طور مثال فقط یک روش صحیح برای ایجاد جدول وجود دارد. بنابراین هیچ راهی برای افزایش بازدهی این نوع دستورات وجود ندارد.
اگر دستور ارسال شده از نوع DML باشد، درخت تجزیه به یک عملیات دیگر به نام Algebrizer ارسال میشود. Algebrizer تمامی اسامی اشیا گوناگون ، جداول و ستونها را که در دستور وجود دارد ، تجزیه می کند.همچنین در هر ستون منحصر به فرد نوع داده را شناسایی میکند (مانند Varchar(50) یا Nvarchar(25) و ...) . موقعیت فیلدهای مجموع (مانند Group by ,MAX) توسط یک عملیات دیگر به نام Aggregate binding درون دستور مشخص می شود. این عملیات در algebrizer مهم است ، زیرا ممکن است در دستور ارسال شده از Alias یا مخفف استفاده شده باشد ، زیرا این اسامی در دیتابیس وجود ندارد و نیاز هست مشخص شده و تجزیه شوند. همچنین ممکن است یک دستور به شی که درون دیتابیس وجود ندارد دسترسی داشته باشد.
خروجی Algebrizer یک باینری به نام Query Processor Tree می باشد که به Query Optimizer ارسال خواهد شد.