بهینه سازی کوئری (بخش دوم، MSSQL Server)
بسم الله الرحمن الرحیم
آموزش بهینه سازی کوئری در MSSQL Server
یکی از جذاب ترین کارها برای من تعمیر و نگهداری و بهینه سازی سیستم ERP برای کارهای بزرگ است.در یک سیستم که ابتدا برای تعداد محدودی از وظایف طراحی شده بود مشکلاتی ایجاد شد و در طول زمان این سیستم رشد بسیار زیادی کرد و از حد انتظار فراتر رفت.
در این برنامه هنگامی که چند کاربر به طور همزمان از سیستم استفاده می کردند کار با این سیستم عملا غیر ممکن می شد. افزایش ظرفیت عملیاتی در سرور به طور کامل نمی تواند این چنین مشکلاتی را حل کند. پس باید از راه حلهای دیگری استفاده شود، بعد از اصلاح کردن business-functionality و بهینه سازی پرس وجو ها در استفاده از منابع، مشکل حل و فصل شد.
قبل از این که به این مقاله بپردازم در اینجا مقاله ای در خصوص نحوه بهینه سازی و چگونگی انتخاب یک Query توسط SQL Server توضیحاتی را ارائه داده ام. برای اجرا هر دستور چندین Plan توسط SQL Server طراحی می شود و بر اساس الگورتیم های متفاوت بهترین روش که کمترین هزینه را دارد، انتخاب و مورد استفاده قرار می گیرد.
همچنین شما باید بدانید که یک روش (Plan) به چه صورتی ایجاد می شود از این رو بهتر است مقاله ای که در این زمینه قبلا ارائه داده شد را مطالعه کنید.
برای رسیدن به حداکثر سرعت در اجرای یک دستور query optimizer (بخش های مختلف کدهای SQL Server را از یکدیگر تفکیک می کند) همیشه تلاش می کند تا یک روش با مجموعه از فعالیت ها که کمترین میزان ممکن از منابع را اشغال می کنند تولید کند.
هنگام ارزیابی هر روش قابل اجرا، بهینه ساز پرس و جو (query optimizer) در حساب های متفاوت فاکتورهای متفاوتی را ایجاد می کند: اشیا پایگاه داده دخالت داده شده، شرایط join شدن آنها با یکدیگر، لیست های بازیابی شده، حضورشاخص ها، در دسترس بود Index ها و آمارهای واقعی و غیره.
با این حال گاهی اوقات بهینه ساز پرس و جو نمی تواند با داده های واقعی کار کند و به همین دلیل ممکن است در زمان استفاده از روش های مختلف بیشتر یا کمتر از مقدار ارزیابی شده هزینه خود را محاسبه کند. همین امر موجب می شود در گاهی اوقات یک روش بهینه سازی نشده انتخاب شود!
SSMS اجازه می دهد روش
- 1