خانه SQL Server معرفی کتابهای تخصصی SQL Server | بخش اول SQL Server افزایش سرعت SQL Server نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۰۷ اردیبهشت ۱۴۰۱ آخرین بروزرسانی: ۳۰ خرداد ۱۴۰۳ زمان مطالعه: 33 دقیقه ۳ (۲) مقدمه در حوزه SQL Server تنوع آموزشها و منابع آموزشی بسیار بالاست. میتوان به دورههایی اشاره کرد که توسط سایت رسمی مایکروسافت و در پلتفرمهای آموزشی این شرکت میتوانید دنبال کنید. فیلمهای آموزشی سایتهای مطرح مانند یودمی یا لیندا و… که توسط افراد خبره و حرفه ایی تدوین و تهیه میشود یا مستندات مکتوب و مقالههایی که توسط MVPهای مایکروسافت ایجاد شده است. اما یکی از غنیترین منابع در این حوزه کتابها و رفرنسهای تخصصی و زبان اصلی این حوزه هست که به جرات میتوان گفت به شکل تخصصی میتوان یک موضوع را دنبال کرد و به شاخههای دیگر این بحث دست یافت. لذا شناخت این منابع از اهمیت بالایی برخوردار هست که به درستی کتاب و مرجع مورد نظر را انتخاب کرده و مطالعه کنیم. در سلسله مقالاتی که در سایت نیک اموز منتشر خواهد شد قرار هست نگاهی جزییتر به سرفصلهای مختلف این کتابها و منابع مرتبط داشته باشیم تا با دید جامعتری بتوانید این منابع را انتخاب کنید. اما قبل از این که این کتابها و سرفصلهای مرتبط معرفی گردد نیاز هست که نکاتی در خصوص نحوه مطالعه این کتابها مطابق با تجربههای کسب شده در این زمینه خدمت شما عزیزان ارائه شود که حداکثر بهره وری لازم از این مطالب کسب شود. مسلما فرایند یادگیری به تنهایی نیاز با یادگیری دارد و باید مطابق با اصول مشخص پیش برده شود. در این زمینه میتوانید پادکست مجموعه آموزشی بیپلاس تحت عنوان چطور کتاب بخوانیم (How to Read a Book) را حتما دنبال کنید که ارزش افزوده خوبی در مطالعه این کتابها برای شما عزیزان ایجاد شود. همچنین پادکستهای سایت متمم که توسط جناب اقای شعبانعلی در خصوص فرایند یادگیری تهیه شده است مسلما باعث خواهد شد ماندگاری این مطالب به مراتب در ذهن شما بیشتر و پایدارتر شود. لینکهای مرتبط با پادکستها در انتهای این مقاله در دسترس شما عزیزان قرار خواهد گرفت. به عنوان اولین کتاب، میخواهیم یکی از بهترین منابع آموزشی در خصوص پلنهای اجرایی را خدمت شما معرفی کنیم. این کتاب تحت عنوان SQL Server Execution Plans, Third Edition, by Grant Fritchey شناخته میشود که کاور این کتاب را نیز در عکس زیر مشاهده میفرمایید درباره نویسنده نویسنده این کتاب اقای Grant Fritchey یکی از افراد شاخص در حوزه SQL SERVER هستند. رویدادها و سمینارهای تخصصی که ایشان برگزار میکنند بسیار پرطرفدار بوده و همواره با جنبههای جدیدی از SQL SERVER مخاطبان را آشنا میکنند. بیش از ۳۰ سال در زمینه توسعه و پشتیانی و مشاوره برای شرکتهای مختلف فعالیت میکنند و دورههای تخصصی و مقالات آموزشی بسیار خوبی در سایت Redgate منتشر میکنند که حتما پیشنهاد میکنم مطالعه بفرمایید. همچنین ارزیابی مجدد مطالب کتاب توسط اقای Hugo Kornelis انجام شده است که ایشان نیز یکی از افراد شاخص در این حوز به شمار میروند. ایشان نیز بیش از ۳۰ سال در این حوزه فعالیت میکنند و در وبلاگ خود مقالات تخصصی و ارزشمندی در این حوزه مینویسند. حتما مقالات ایشان را نیز دنبال بفرمایید. درباره کتاب همان طور که می دانید اجرای کوئریها در SQL SERVER در فازهای مختلف انجام میشود. هر فاز به تنهایی شامل الگوریتمها و قواعدی هست که باید کلیه مراحل ان اجرایی شده تا خروجی به مرحله بعدی داده شود. به عبارتی تا وقتی اسکریپت شما دارای مشکل سینتکسی هست ، همانند ادرس اشتباهی خواهد بود که مسلما به هیچ راه راستی هدایت نخواهد شد. این کتاب در واقع فاز سوم از بحث اجرای کوئریها را مورد بررسی قرار داده است. در این فاز عملا الگوریتمهایی برای ایجاد پلنهای اجرایی به قضیه ورود خواهند کرد که بهینهترین پلن ها متناسب با کوئری ایی که به سمت SQL SERVER ارسال شده است، ساخته شود. پلن اجرایی حکم یک زبان جدید را دارند که توسعه دهندگان و مدیران سیستم باید به خوبی بر روی این زبان مسلط باشند. اما زبانی که باید یاد بگیریم به شکل بصری هست! یعنی مجموعه اشکالی در اختیار شما قرار میگیرد که هر کدام شامل کوله باری از Propertisها و رفتارهای مشخصی هست که باید به این اشکال تسلط پیدا کنید. در کتاب در حدود ۸۲ شکل که تحت قالب اپراتور (Operator) شناخته میشود معرفی خواهد شد. این کتاب در مرحله اول، شما را با مهمترین اپراتورها و خواص هر یک به تنهایی آشنا میکند سپس در اواخر کتاب، تحت قالب سناریوهای عملیاتی، ارتباط بین این اپراتورها را به خوبی تشریح میکند. مسلما کلیه این اپراتورها نیازی به یادگیری و شناخت دقیق ندارند چرا که به مرور متوجه خواهید شد که الگوی ایجاد و ارتباط بین این اپراتورها بعد از مدتی که کوئریهای مختلف و گزارشات متنوعی ایجاد کنید به راحتی قابل فهم هست و میتوانید گلوگاه هر کوئری را به راحتی پیدا کنید. مسلما کاربرانی که در سیستم مشغول به فعالیت هست دستوراتی به شکل مستقیم یا غیر مستقیم به سمت SQL SERVER ارسال میکنند. این درخواستها میتواند از سمت سرویسهای مختلفی به سمت SQL SERVER ارسال شود. لذا هر ورودی باید یک نقشه راه مشخصی از Engine دریافت کند و مطابق با آن دادههای مورد نیاز خود را از سیستم استخراج کند. این کتاب به صورت رایگان در اختیار عموم قرار گرفته و میتوانید از مطالب ارزشمند آن استفاده نمایید نگاهی به سرفصل های کتاب این کتاب در ۱۷ بخش مختلف، روایتگر پلنهای اجرایی و قابلیتهای مختلفی هست که در اختیار دارید. ساختار کتاب بدین شکل هست که در ابتدا مفاهیم پایه و معماری داخلی مرتبط با اجرای کوئریها مورد بررسی قرار میگیرد تا کمی نسبت با الگوریتمهای اجرایی آن اشنا شوید، سپس اپراتورهای مختلف که در عملیاتهای متفاوت در SQL SERVER نمایان میشود مورد بررسی قرار میگیرد. شاید ابزارهای مختلفی برای کار با پلنهای اجرایی دیده باشید که عملکرد بسیار خوبی نسبت به محیط SSMS در اختیار شما قرار میدهد. سنگ بنای کلیه این محصولات بر اساس زبان XML هست که کلیه Parent-childهای مرتبط با هر بخش، خود شامل اطلاعات خوبی در مورد پلن های اجرایی هست. به عنوان مثال قطعا در پلنهای اجرایی مشاهده کردید که علامت خطری بر روی یک سری از اپراتورها ملاحظه میشود. کلیه این Warningها تحت Rootهای مشخصی قابل بررسی هستند. یکی از قویترین ابزارهایی که برای بررسی پلنهای اجرایی در این کتاب معرفی شده است، ابزار SQL Sentry Plan Explorer هست که ابزار رایگان و قابل دسترسی برای بررسی پلنهای اجرایی خواهد بود. در ادامه سرفصلهای اصلی کتاب با جزییات بیشتری مورد بررسی قرار خواهد گرفت تا قبل از مطالعه دقیقتر مطالب، دید جامعی نسبت به خروجی این کتاب داشته باشید فصل اول: Introducing the Execution Plan فصل دوم: Getting Started Reading Plans فصل سوم: Data Reading Operators فصل چهارم: Joining Data فصل پنجم: Sorting and Aggregating Data فصل ششم: Execution Plans for Data Modifications فصل هفتم: Execution Plans for Common T-SQL Statements فصل هشتم: Examining Index Usage فصل نهم: Exploring Plan Reuse فصل دهم: Controlling Execution Plans with Hints فصل یازدهم: Parallelism in Execution Plans فصل دوازدهم: Batch Mode Processing فصل سیزدهم The XML of Execution Plans فصل چهاردهم: Plans for Special Data Types and Cursors فصل پانزدهم: Automating Plan Capture فصل شانزدهم: Chapter 16: The Query Store فصل هفدهم: SSMS Tools for Exploring Execution Plans در فصل اول کتاب می خوانیم در خصوص ساختار و معماری پلنهای اجرایی توضیحات جامعی ارایه شده است. فازهای اجرای کوئریها به خوبی توضیح داده شده که در هر فاز، چه اتفاقی بر روی کوئری مورد نظر اجرا میشود. نقش Optimizer در ایجاد پلنهای اجرایی چیست و چرا این فاز از اهمیت بالایی برخوردار هست. در مرحله بعدی در خصوص بخشی از حافظه که تحت عنوان Plan cache شناخته میشود توضیحاتی ارایه شده است. در واقع پلنهای اجرایی هزینه ساخت بالایی دارند پس باید محلی برای استقرار آنها در نظر گرفت و به خوبی از آن محافظت کرد که چندین بار مورد بررسی قرار بگیرند. دسترسی به اطلاعات و مخزن ذخیرهسازی این پلنها مشخص شده است که تحت چه شرایط و با چه مجوزهایی میتوان این پلنها را مورد بررسی قرار داد. قالبهای نمایشی پلنهای اجرایی توضیح داده است که هر یک در چه شرایطی استفاده میشود. در این فصل به بعضی از propertiesهای مرتبط با اپراتورها اشاره شده است که چه اطلاعاتی را در اختیار ما قرار میدهند. همچنین ذخیرهسازی و استفاده از پلنهای اجرایی در ابزارهای مختلف در این فصل به مرور اشاره شده است که بتوانید در ابزارهای بهتری این پلنهای را مورد بررسی قرار دهید. در فصل دوم کتاب می خوانیم خوانش پلنهای اجرایی را یاد خواهیم گرفت. این که چه اپراتورهایی در حین فرایند خواندن اطلاعات ایجاد شده و چه اطلاعتی میتوانیم از آنها دریافت کنیم. تحلیل پلنها از سمت راست به چپ باید انجام شود یا از سمت چپ به راست و در واقع مزیت هر کدام در پیدا کردن مشکلات کوئری برای ما چیست؟ شاید برای شما نیز جالب باشد که بخش مجزایی تحت عنوان First operator در این فصل به تنهایی مورد بررسی قرار گرفته است که میتوانید اطلاع کلی و دقیقتری نسبت به مشخصات این اپراتور به دست اورید. بعضا افرادی که در این زمینه تجربههای زیادی دارند چه بسا قبل از بررسی یک پلن پیچیده، فقط با یک نگاه به همین بخش بتوانند عمده مشکلات کوئری را پیدا کنند. در قسمت بعدی در خصوص Warningsهایی که ایجاد میشود اطلاعات دقیقتری کسب خواهید کرد. Warningsها از دو جنبه در این قسمت مورد بررسی قرار گرفته است. جنبه اول برای زمانی هست که پلن اجرایی شما بسیار ساده باشد ولی حجم دیتا ورودی شما بسیار زیاد و جنبه دوم برای زمانی هست که دیتا ورودی شما بسیار کم باشد و پلن اجرایی شما بسیار پیچیده و گران قیمت! کلیه این مفاهیم ارتباط مستقیمی با اجرای کوئریها و عملکرد آنها دارند که متوجه خواهید شد، برطرف کردن این Warningsها بسیار عامل مهمی در اجرای بهینه کوئریها هستند. در قسمت بعد مبحث Operator cost موردبررسی قرار میگیرد. مسلما هر کدام از این اپراتورها یک ارزش و مقداری را طی اجرا با خود حمل میکنند که در نهایت مجبور خواهند شد به First operator گزارش نهایی را تقدیم کنند. این که بدانیم چه مقدار بر روی این کارگرهای زحمتکش و وفادار سربار عملیاتی اعمال کردیم و چه قدر تحت فشار قرار گرفتند وظیفه انسانی هر DBA ایی هست که باید خوای نیروی کار خود را داشته باشد! مسلما هر نقشه راهی برای رسیدن به مقصد، مستلزم طی کردن مسیرهای مشخص طبق خطوطی هست که در نقشه مشاهده میکنید. بعضا نیاز هست که این مسیر منجر به دور زدن ترافیک شهری و گذر از کمربندی هر شهر باشد یا نیاز هست که حتما محلههای مختلفی در یک شهر طی شود که علاوه بر رسیدن به مقصد نهایی، لذت کافی حین سفر کسب شود. این قسمت تحت عنوان Data flow شناخته شده و معرفی گردیده است. اگر بخواهیم مثال بهتری در این خصوص ارایه دهیم، میتوانیم به شلنگ آب و لولههای اب اشاره داشته باشیم. مسلما در ذهن شما هم این شبیهسازی ایجاد شد که لوله اب برای ابرسانی به یک شهر مورد استفاده قرار میگیرد و شلنگ اب برای ابیاری و بعضا شتسشو و این تیپ موارد. پس ظرفیت انتقال اب و وارد شدن اب به محلی که قرار هست از این دو گزینه استفاده شود باید متناسب با ساختاری باشد که ابرسانی قرار هست انجام شود. نمیتوان با یک شلنگ اب به مردم یک روستا ابرسانی کرد و از طرفی نمیتوان بک یک لوله اب شهری، یک باغچه را ابیاری کرد. نقش Data flowها به قدری حائز اهمیت هست که شخص با تجربه با یک نگاه متوجه وضعیت اسفناک این انتقال دیتا خواهد شد. چرا باید حجم ورودی دیتا ان قدر زیاد باشد که هدر رفت منابع داشته باشیم؟ چرا دید مناسب نسبت به فیلترینگ کوئریها بعضا به درستی اعمال نمیشود که نشت دیتا برای پلن اجرایی را شاهد باشیم؟ این چراها و خیلی از این سوالات، دغدغههای توسعه دهنگان و مدیران سیستم هستند که با شناخت زبان پلنهای اجرایی به راحتی میتوانند ظرفیت انتقال دیتا را برای هر درخواست به خوبی مشخص کرده و تخمین بزنند. در فصل سوم کتاب می خوانیم تمرکز اصلی این فصل بر روی مبحث ایندکسها هست. به صورت کلی نکاتی که در این فصل بررسی میشود در خصوص Scan و Seek شدن ایندکسها بوده و در قسمت بعدی کتاب مباحث مرتبط با Heap Tableها مورد بررسی قرار میگیرد. در این فصل متوجه خواهید شد که Index Scan همواره دارای سربار نیست و از طرفی Index seek هم همواره یک مزیت برای یک پلن اجرایی به حساب نمیاید. عمدتا ممترین بخشی که در ابتدای پلنها مورد بررسی قرار میگیرد، استفاده صحیح از ایندکسهایی هست که برای جداول مرتبط تعریف شده است. در خصوص مباحث مرتبط با ایندکسها کتابها و مراجع بسیار خوبی وجود دارد که این مبحث را دقیقتر و با جزییات بیشتری مورد بررسی قرار دادهاند که در قسمتهای بعدی این کتابها معرفی خواهند شد. در فصل چهارم کتاب می خوانیم مباحث مرتبط با بحث Join کردن جداول و الگوریتمهای مرتبط با این سبک کوئرینویسیها مورد بررسی قرار میگیرد. در این فصل متوجه خواهید شد که عبارتهایی که برای اتصال چند جدول نوشته میشد تحت شرایط مختلفی از متدها و روشهای مختلفی بعضا ممکن است استفاده کنند. در واقع نکات مهمی که در این فصل مورد بررسی قرار میگیرد مباحث مرتبط با ورودیها و خروجیهایی هست که از اپراتورهای مختلف به اپراتور مرتبط با Join وارد یا خارج میشود. در بعضی مواقع هم Optimizer به پلن اجرایی اپراتورهایی اضافه میکند که بتواند از الگوریتمهای مناسبی در ادامه روند اجرایی پلن استفاده کند. تمرکز این فصل بر روی این موضوع هست که در سه مدل مختلف دیتا در حجم کم، متوسط یا زیاد ساخت پلن به چه صورت انجام میشود که با آن آشنا خواهید شد. در فصل پنجم کتاب می خوانیم در کوئری نویسی گاها نیاز هست که اطلاعات بر حسب ستون هایی مرتبط شوند یا گروه بندی بر اساس فیلد های مختلف انجام شود . مدل گروه بندی اطلاعات بسته به عواملی می تواند شامل اپراتور های مختلف باشد . گاها باید اپراتور های استفاده شود که در پلن های اجرایی مدل های دیگری را شاهد هستیم که منجر به سربار بزرگی بر روی آنها خواهد شد در فصل ششم کتاب می خوانیم در مباحث مرتبط با پلن های اجرایی ، همواره اپراتور های مرتبط با SELECT بررسی نمی شوند. بلکه اپراتور های مرتبط با عملیات DML نیز بسیار حاثر اهمیت هستند که بررسی شوند. بعضا نیاز هست که از کوئری های مرتبط با update در شرایطی استفاده شوند که متوجه شویم علت کندی دقیقا در چه بخشی بوده و برای آن قسمت راه حلی ارایه شود . در این فصل دقیقا این مباحث مطرح می شود و اپراتور های مرتبط با این عملیات مرد بررسی قرار گرفته است. در فصل هفتم کتاب می خوانیم نقش Store procedure ها، Function ها و View ها همواره در دیتابیس ها مشهود هست. لذا اجرای هر کدام از این Object ها ، اپراتور های مخصوص به خود را دارا بوده که در این فصل مورد بررسی قرار گرفته است. در فصل هشتم کتاب می خوانیم در این فصل نقش ایندکسها در بهینه نوشتن کوئریها با جزییات بیشتری مورد بررسی قرار گرفته است. یکی از مهمترین بحثها در پلنهای اجرایی مباحث مرتبط با پلنهای تخمینی و پلنهای واقعی هست که در صورت مغایرت مشکلات زیادی برای سیستم ایجاد خواهند کرد. در این فصل علاوه بر بررسی ایندکسها، در خصوص مباحث مرتبط با Statisticsها هم نکاتی ارایه شده است که حتما باید مورد مطالعه قرار گیرد. در بحث Statisticsها cardinality estimations جزو مباحث مهمی هست که دقت تخمین و واقعی بودن پلن اجرایی را به ما نمایش خواهد داد. البته در این قسمت مباحث مرتبط با Satisticsها به جزییات بیشتری مورد بررسی قرار گرفته است. این فصل یکی از مهمترین فصلهای این کتاب به شمار میرود چرا که بحث Statisticsها همان طور که مطرح شد تحت عوامل و شرایط مختلفی ممکن است پلنهای غیر واقعی به ما ارایه دهد. در ادامه با مفاهیم parameter sniffing آشنا خواهید شد و متوجه میشوید که چه سرباری بعضا در پلنهای اجرایی به همراه خواهد داشت. در کل نکات ارزشمندی در این فصل ارایه میشود که در سایر مراجع هر کدام از این نکات با جزییات بیشتری مورد بررسی قرار گرفته است. به عنوان مثال در کتاب Pro SQL Server Internals یک فصل مجزا فقط در خصوص Statisticsها با مثالهای بیشتر مورد بررسی قرار گرفته است که اهمیت این موضوع را بهتر و بیشتر درک کنید. در ادامه مباحث مرتبط با Columnstore Indexes و اپراتورهای آن را شاهد هستیم. Columnstore Indexes نوعی از ایندکسها هستند که علاوه بر فشردهسازی خوبی که بر روی اطلاعات انجام میدهند عملکرد کوئریها را نیز به مراتب ازایش خواهند داد. البته دقت داشته باشید که جنس کوئریها عمدتا باید کوئریهای تحلیلی باشند. معماری Columnstore Indexes به صورت کوتاهی در این قسمت اشاره شده است. هدف این کتاب سناریوهای عملیاتی و موارد کاربردی جهت استفاده از Columnstore Indexes نیست. بلکه اشنایی با زبان این اپراتورها و نقش آنها در انتقال اطلاعاتی هست که از ورودیهای مختلف دریافت و به خروجیهای مختلف بعضا ارسال میشود. در نوع دیگری از ایندکسها به اسم Hash Index و جداول In-memory مورد بررسی قرار گرفته است و اپراتورهای مرتبط با آن معرفی شده است. در فصل نهم کتاب می خوانیم همان طور که در فصل های قبلی به بحث Plan Cache اشاره ایی داشتیم در این فصل با جزییات بیشتری بحث نگهداری از پلن های اجرایی با جزییات بیشتر بررسی شده است. این که بتوانیم از سبک هایی برای نوشتن کوئری ها استفاده کنیم که پلن اجرایی چندین بار مورد استفاده قرار گیرد، نوعی امتیاز برای ما به حساب می اید. همان طور که میدانید کوئری های Ad Hoc به عنوان آفتی بزرگ برای پلن های اجرایی به حساب می آیند. اما می توانید با تنظیم پارامتر هایی در سطح سرور یا اصلاح کوئری ها، از به وجود آمدن این مشکلات چشم پوشی کنید . این فصل تمرکز بیشتری بر روی Plan Reuse یا استفاده مجدد از پلن های اجرایی دارد و همان طور که مطرح شد بیشتر به سبک کوئری نویسی و اصلاح روند نوشتن اسکریپت ها خواهد پرداخت . اشنایی با برخی DMV های سیستمی نظیر sys.fn_validate_plan_guide به عنوان راهنمای پلن های اجرایی در این فصل بیشتر مورد بررسی قرار خواهد گرفت. همچنین خارج کردن پلن های اجرایی منتخب از پلن کش به همراه اسکریپت های مرتبط در این فصل بیشتر مورد بررسی قرار میگیرد. در فصل دهم کتاب می خوانیم در این فصل نویسنده کتاب شما را با تکنیکهایی اشنا میکند که بتوانید رفتار پلنهای اجرایی را عوض کنید. مسلما الگوریتمهای مرتبط با پلنهای اجرایی همواره در بهینهترین حالت، به ما خروجی ارایه میدهد ولی در بعضی از شرایط خودمان میخواهیم که رفتار پلن به سمت دیگری هدایت شود و با حالت پیش فرض ایی که پلن ساخته میشود مقایسه کنیم. گاها نیاز هست که در هر بار اجرا، ابتدا پلنهای قبلی حذف، سپس پلن جدید ایجاد و بر اساس پارامترهای ورودی بتوانیم درخواست آن را اجرا کنیم. گاها نیاز هست هست که برای کوئری خاص، منابع بیشتری در اختیار آن اسکپریت قرار گیرد که در پردازش درخواست سریعتر خروجی نهایی کسب شود. گاها نیاز هست که برای بخشی از اطلاعات که چکالی بالایی نسبت به سایر اطلاعات در یک جدول دارند بتوانیم بهینهسازی خاصی انجام دهیم و برای سایر بخشها این قضیه برایمان مهم نباشد. همه این عوامل در واقع رفتارهایی هست که میتوانیم بر روی پلنهای اجرایی عملیاتی کنیم و خروجی آنها را نسبت به یکدیگر یا حتی پلن پیش فرض مقایسه کنیم. به عبارتی در این فصل Hintهایی مورد بررسی قرار میگیرد که بتوانیم پلنها را به شکل دیگری اجرا کنیم. در فصل یازدهم کتاب می خوانیم موازایسازی و اجرای کوئریها به سبک Parallelism مزیتهایی به همراه دارد. در این فصل شاهد سه گونه اپراتور مختلف برای بحث موازی هستیم. در واقع صحبت اصلی بر سر این مورد هست که اگر قرار هست چندین Thread مختلف به شکل موازی، بخشهای مختلفی را اجرا کنند در نهایت اپراتور بعدی باید کلیه این اطلاعات را دوباره به همان شکل بین چند Thread تقسیم کند یا وارد اپراتورهایی میشود که قرار هست بحث تجمیع دیتا برای ان صورت گیرد. لذا کنترل این اطلاعات و دریافت اطلاعاتی که از طریق چندین Thread انجام میشود باید به دقت بررسی شود. نکته بسیار مهمی که در این فصل به آن اشاره شده است بحث توزیع اطلاعات و تقسیم سهم مساوی بر روی هر Thread هست. اگر پلنها با تقسیمهای نسبتا مساوی، نسبت به پردازش اطلاعات وارد عملیات شوند، برای کوئری شما یک مزیت بسیار خوب محسوب خواهد شد اما شرایطی هست که کاملا باید در نظر داشته باشید این تقسیم ارث به شکل درستی انجام گیرد! در فصل دوازدهم کتاب می خوانیم اجرای کوئری ها به دو شکل امکان پذیر هست. روش اول بدین شکل هست که پردازش اطلاعات بر اساس هر سطر انجام شود و روش دوم بدین شکل هست که پردازش به صورت دسته ایی صورت گیرد. این حالت با نام Batch Mode Processing شناخته می شود که در مباحث مرتبط با Columnstore Indexes ها نیز به ان اشاره شده است. مزیت های بسیاری در این سبک از خواندن اطلاعات وجود دارد که باعث می شود به مراتب شاهد I/O کمتر و هدر رفت منابع باشیم. در فصل سیزدهم کتاب می خوانیم مشاهده پلن های اجرایی به سبک XML شیوه ایی از عیب یابی کوئری ها هست که در بعضی شرایط بررسی پلن ها به این شکل راحت تر انجام می شود. همان طور که در فصل های قبلی اشاره کردیم، هر بخش از تگ های مرتبط با XML شامل اطلاعاتی است که می توانید به صورت Visual نیز مشاهده کنید. هر چند که تنوع DMV ها در این بخش آن قدر متنوع و بالاست که می توانید در کنار XML هر پلن، حالت گرافیکی پلن ها را نیز مشاهده کنید. در فصل چهاردهم کتاب می خوانیم در این فصل، اپراتورهای مرتبط با سایر Data Typeها مورد بررسی قرار میگیرد. همان طور که میدانید استفاده از XML یا Json جزو Data typeهای پیشرفته ایی هستند که رفرنسهای مجزایی نیز برای خود دارند. در این فصل علاوه بر این موضوع با پلنهای اجرایی مرتبط با Cursor نیز اشنا خواهیم شد. همچنین دیتاتایپهای سلسله مراتبی و وراثتی و دیتاتایپهای مرتبط با اطلاعات جغرافیایی نیز به صورت مختصر در این قسمت بررسی شده است که آشنایی کلی با اپراتورهای آن پیدا خواهید کرد. در انتها سبک کوئرینویسی Xquery نیز در این فصل مورد بررسی قرار گرفته است در فصل پانزدهم کتاب می خوانیم ذخیره سازی پلن های اجرایی به قدری حاثر اهمیت هست که با استفاده از روش های مختلف می توانید این کار را انجام دهید. اهمیت این موضوع بدین جهت هست که هیچ تضمینی وجود ندارد که همواره پلن ساخته شده در پلن کش باقی بماند. بسته به شرایطی Engine صلاح خواهد دید که پلن مورد نظر را به صورت کلی خارج کند چرا که سن پلن بالا رفته یا درخواست مرتبط با این پلن بسیار کمتر شده است. به همین جت ذخیره سازی پلن ها در این فصل به روش های مختلف مورد بررسی قرار خواهد گرفت. در فصل شانزدهم کتاب می خوانیم این فصل مکمل فصل قبل بوده و روشی را پیشنهاد میکند که دردسرهای استفاده از روشهای قبلی به شدت کاهش پیدا میکند. همچنین در فصل قبل، روشهایی که معرفی شده بود عملا سربار زیادی ممکن است در بعضی از شرایط به همراه داشته باشد که تمرکز نویسنده در این فصل بیشتر بر روی مبحث مرتبط با QueryStore هست. همان طور که در مقالات قبلی در این خصوص توضیحات کامل و جامعی در خصوص معماری این روش و جمع اوری اطلاعات از کوئریها و پلنهای اجرایی ارایه گردید، به عنوان یک Best Practices این روش در انتهای این فصل معرفی شده است. لذا پیشنهاد میشود که در ابتدا یک دید مختصر نسبت به مطالب این فصل کسب کنید سپس مقالاتی که در خصوص بحث Query Store در وب سایت نیک اموز نیز ارایه شده است را مطالعه فرمایید که به عنوان مبحث تکمیلی در این قسمت مورد استفاده قرار گیرد. هدف نویسنده در این فصل بر روی معماری Query Store نیست. بلکه بیشتر بر روی گزارشاتی هست که میتوانیم پلنهای اجرایی و تخمینهای آن را مورد بررسی قرار دهید همچنین به مباحثی مانند force a plan و Automated plan forcing نیز اشاره شده است که اگر به خاطر داشته باشید قابلیت APRC در مبحث Query Store این امکان فوق العاده را برای ما ایجاد میکرد. در فصل هفدهم کتاب می خوانیم هدف نویسنده در این فصل بیشتر بر روی مقایسه پلنهای اجرایی در محیط SSMS هست که بتوانیم پلنهای اجرایی را تحلیل کنیم، مقایسه کنیم، و حتی از ابزارهای مکمل نظیر SSMS Tools Pack نیز به خوبی استفاده کنیم. ولی همان طور که در فصلهای قبلی اشاره گردید، ابزارهای بسیار خوبی نظیر SQL Sentry Plan Explorer در اختیار کاربران هست که بتوانند به شکل بهتر و دقیقتری امار پلنهای اجرایی را ارزیابی کنند. در خصوص استفاده از این ابزار میتوانید از سایت SentryOne اطلاعات دقیقتری نسبت به Cheet sheet نرمافزار کسب کنید. همچنین این سایت ابزارهای دیگری برای تحلیل و مانیتور کردن سیستمهای عملیاتی در اختیار شما قرار میدهد. ولی ابزار مرتبط با Plan آن جزو بهترین ابزارهایی هست که توسط افراد مختلف مورد استفاده قرار میگیرد. جمع بندی این کتاب به گونه ایی نوشته شده است که مباحث در حد مختصر اشاره شود. لذا برای تکمیل هر کدام از این سرفصلهایی که خدمت شما عزیزان مطرح شد باید کتابها و مراجع بهتری را مورد بررسی قرار دهید که نسبت به ساختار هر بخش به خوبی اشنا شوید. سعی کنید همواره از ابزارهایی نظیر Query Store برای جمع اوری اطلاعات پلنها و انالیز موارد مرتبط با هر بخش به خوبی استفاده کنید. همان طور که مطرح گردید، پلنهای اجرایی به عنوان یک زبان مجزا نیاز به تفسیر دارند که بر اساس تجربههای مختلفی که از پلنهای مختلف به دست میآورید، میتوانید در کمترین زمان متوجه سبک و سیاق کوئرینویسی و مشکلات مرتبط با آن پلن شوید. حتما سعی کنید بعد از مالعه این کتاب، سوالات مرتبط با پلنهای اجرایی که در Stackoverflow و dba. stackexchange مطرح شده است را مطالعه بفرمایید. حتما مقالات مرتبط با پلنهای اجرایی را در هر کتابی که ملاحظه کردید مطالعه بفرمایید چرا که مفاهیم پایه در همه کتابها مشترک هست و هر نویسنده ایی برای این که ارزش محتوای خودش را بالاتر ببرد این تجربهها را سعی کرده منتقل کند. یکی از سرامدترین افراد برای این حوزه، نویسنده همین کتاب هست که در فرومها و سایتهای مختلف تجارب خود را به خوبی بیان کرده است. حتما پس از خواندن این کتاب نظرات خود را با ما به اشتراک بگذارید. منابع و لینک های پیوست https://www.red-gate.com/simple-talk/author/grant-fritchey/ https://www.linkedin.com/in/grant-fritchey/ چه رتبه ای میدهید؟ میانگین ۳ / ۵. از مجموع ۲ اولین نفر باش دانلود مقاله معرفی کتابهای تخصصی SQL Server | بخش اول فرمت PDF 33 صفحه حجم 3 مگابایت دانلود مقاله معرفی نویسنده مقالات 402 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ