Ad-Hoc Queryها یا کوئریهای موقت در SQL Server، کوئریهایی هستند که به صورت پویا و بدون استفاده از پارامترها یا برنامههای ثابت تولید میشوند و به سرور ارسال میشوند. این نوع کوئریها معمولاً از طریق برنامههایی مانند برنامههای وب یا برنامههای دسکتاپ به سرور ارسال میشوند و در هر بار اجرا، یک Execution Plan جدید تولید میشود.
به طور کلی، Ad-Hoc Queryها میتوانند با مشکلات زیر روبرو شوند:
- Overhead در تولید Execution Plan:
هر بار که یک کوئری Ad-Hoc ارسال میشود، SQL Server باید یک Execution Plan جدید برای آن تولید کند، حتی اگر کوئری مشابهی قبلاً اجرا شده باشد. این عمل باعث افزایش Overhead بر روی سرور میشود، زیرا منابع سیستم برای تولید Execution Plan هدر میرود.
- اشغال حافظه:
تولید Execution Plan برای هر کوئری Ad-Hoc به مصرف حافظه سرور میانجامد. با افزایش تعداد کوئریهای Ad-Hoc، حجم حافظه مورد نیاز برای ذخیره Execution Planها نیز افزایش مییابد که ممکن است منجر به اشکالات مربوط به مدیریت حافظه شود.
- تکراری بودن Execution Plan:
برای برخی از کوئریهای Ad-Hoc، Execution Planهای مشابهی تولید میشود. این تکراری بودن Execution Planها باعث اشغال حافظه و کاهش بهرهوری سرور میشود.
- کاهش قابلیت استفاده مجدد از Plan Cache:
زمانی که کوئریهای Ad-Hoc ارسال میشوند، Execution Planهای مربوط به آنها به طور پیشفرض در Plan Cache ذخیره نمیشوند. این باعث میشود که امکان استفاده مجدد از Execution Planها کاهش یابد و سرعت اجرای کوئریها کاهش پیدا کند.
- مشکلات امنیتی:
استفاده از کوئریهای Ad-Hoc بدون استفاده از پارامترها و اعتبارسنجی دادهها ممکن است منجر به مشکلات امنیتی مانند حملات SQL Injection شود.
برای حل این مشکلات، معمولاً توصیه میشود که از روشهایی مانند پیشفرض استفاده از پارامترها در کوئریها، کشف و استفاده از Execution Planهای موجود در Plan Cache، و استفاده از Query Store و برنامهریزی اجرای کوئریها استفاده کنید. همچنین، استفاده از کوئریهای ثابت و استفاده مجدد از آنها میتواند به بهبود عملکرد و کارایی سرور کمک کند.
دیدگاه ها 1