خانه SQL Server Cardinality Estimator در SQL Server 2014 SQL Server افزایش سرعت SQL Server نوشته شده توسط: سحر بیرامی تاریخ انتشار: ۱۵ آذر ۱۳۹۴ آخرین بروزرسانی: ۲۲ مهر ۱۴۰۲ زمان مطالعه: 4 دقیقه ۱ (۱) با یک مثال شروع می کنیم ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می کنیم و یک کوئری با شرط Where بر روی جدول اجرا می کنیم. Sql به صورت خودکار یک Statistic Column بواسطه شرطی که در کوئری گذاشتم ایجاد میکند . حال مسئله این است که اگر ما هر کوئری برای به دست آوردن زیر مجموعه ای از هزار رکورد اجرا کنیم ، Optimizer تعداد رکوردهای تخمینی را از روی Column Statistic به دست می آورد ( منظور همان Column Statistic ساخته شده هنگام اجرای اولین کوئری است ). اگر ۵۰۰ رکورد دیگر به جدول اضافه کنیم ، statistic به علت محدودیت آستانه خود ، به طور خودکار بروز نمی شود( در واقع Sql تا زمانی که به حداکثر ظرفیت آستانه آمار و یا همان Statistic نرسیده باشد ، آن را بروز میکند) و اگر ما کوئری برای واکشی رکوردهای جدیدا اضافه شده اجرا کنیم ، با برآوردگر کاردینالیتی قدیم (قبل از ۲۰۱۴) تعداد رکوردهای تخمینی ۱ است ، چون که هیچ Statistic ای برای رکوردهای جدیدی که اضافه کردیم ، ساخته نشده است ولی اگر ما کوئری را با استفاده از کاردینالیتی جدید اجرا کنیم تعداد رکوردهای تخمینی نسبت به کاردینالیتی قدیم ، خیلی نزدیک به تعداد واقعی است. این مسئله در واقع یک پیشرفت خوب محسوب میشود . (در افزایش سرعت کوئری ها تاثیر خوبی دارد ). مثال مطرح شده را قدم به قدم بررسی می کنیم : ابتدا یک جدول ایجاد کرده و هزار رکورد در آن درج می نمائیم و سپس یک کوئری برای به دست آوردن شناسه های کوچکتر از ۸۰۰ اجرا میکنیم ، خواهیم دید که یک Statistic ایجاد میشود. حالا کوئری زیر را برای مشاهده نام statistics ایجاد شده بر روی ستون id اجرا می کنیم . این نام ممکن است در سیستم های مختلف متفاوت باشد. نام statistics را در کوئری زیر جایگزین و کوئری را اجرا میکنیم ( همانطور که در تصویر مشخص شده است تعداد رکوردها را ۱۰۰۰ نمایش میدهد) حالا کوئری برای درج ۵۰۰ رکورد دیگر اجرا می کنیم: اگر بعد از درج ۵۰۰ رکورد ، هدر مربوط به Statistics را مجددا بررسی کنیم می بینیم که تعداد کل رکوردها همان مقدار قبلی است (هزار رکورد ) . علت این امر همان محدودیت آستانه Statistic است . کوئری برای به دست اوردن رکوردهایی که جدیدی که اضافه کردیم همراه با Actual Execution Plan اجرا می کنیم . مورد جالبی که مشاهده میشود این است که Statistic چیزی راجع به رکوردهای جدبد اضافه شده نمیداند و تعداد رکوردهای تخمینی را یک بر میگداند. تعداد رکوردهای تخمینی یک برگردانده میشود و این مسئله خوبی برای Performance محسوب نمیشود. حالا مشابه این کوئری را در CE جدید (در sql 2014 ) بررسی می کنیم: مشاهده می کنید که تعداد رکوردهای تخمینی ۳۰۰ برگردانده شده و این به عدد واقعی نزدیکتر است. چه رتبه ای میدهید؟ میانگین ۱ / ۵. از مجموع ۱ اولین نفر باش معرفی نویسنده مقالات 1 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده سحر بیرامی معرفی محصول مسعود طاهری آموزش ۳ در ۱ Performance Tuning در SQL Server 6.700.000 تومان مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ فاضل واعظcom ۲۷ / ۰۹ / ۹۴ - ۱۱:۲۴ با سلام سایت بسیار خوبی دارید پاسخ به دیدگاه سلیم ظریف برگی ۲۰ / ۰۹ / ۹۴ - ۰۶:۴۹ بسیار مناسب و کاربردی و در عین حال روان و خوب توضیح داده شده بود با تشکر پاسخ به دیدگاه فرشید علی اکبری ۱۸ / ۰۹ / ۹۴ - ۰۳:۳۰ سلام تشکر از بابت ارائه این مقاله تون. بسیار جمع و جور و خلاصه و مفید بود… عالی.. موفق باشید. پاسخ به دیدگاه مجتبی شهریور ۱۵ / ۰۹ / ۹۴ - ۰۹:۰۱ جناب استاد طاهریسلاماز راهنمایی ارزشمند حضرتعالی متشکرم پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۴۱ سلام خانم بیرامی متشکرم از ارائه مقاله خوبتان در سایت منتظر مقاله های بیشتر شما در نیک آموز هستیم موفق باشید پاسخ به دیدگاه مجتبی شهریور ۱۵ / ۰۹ / ۹۴ - ۰۶:۳۹ سلامضمن تشکر از مقاله خوبتون خانم بیرامیدر کل مقاله حضرتعالی مقاله خوبی بود و نقطه قوت مقاله در کاربردی بودن مقاله هست ولی کاش قبل رفتن به سر مثال مقداری مقدمه و پیشگفتار داشت تا با یک زمینه فکری خواننده مقاله به مثال و اصل موضوع ورود میکردد ودرک مقاله ملموس تر میشد…متشکرم پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۱۹ مجتبی جان سلام درباره Cardinality Estimation در SQL Server در سایت چندین مقاله مفید ارائه شده است . دوستان عزیز برای کسب اطلاعات بیشتر در این خصوص به لینک های زیر مراجعه کنند. https://nikamooz.com/statistics-introduced-in-sql-server/ https://nikamooz.com/statistics-automatically-updated-by-sql-server/ پاسخ به دیدگاه مسعود طاهری ۱۵ / ۰۹ / ۹۴ - ۰۷:۱۹ مجتبی جان سلام درباره Cardinality Estimation در SQL Server در سایت چندین مقاله مفید ارائه شده است . دوستان عزیز برای کسب اطلاعات بیشتر در این خصوص به لینک های زیر مراجعه کنند. https://nikamooz.com/statistics-introduced-in-sql-server/ https://nikamooz.com/statistics-automatically-updated-by-sql-server/ پاسخ به دیدگاه