بهینهسازی کوئری در SSMS: معرفی ابزار پیشنهاددهنده Query Hint در SSMS
Query Hintها ابزارهایی قدرتمند برای کنترل نحوه اجرای کوئریها هستند. آنها بهینهساز کوئری را مجبور به انتخاب طرح اجرای خاصی میکنند که میتواند کارایی را بهبود بخشد. با این حال، استفاده نادرست یا بیرویه از آنها میتواند منجر به مشکلات بزرگتری شود.
ریسک اصلی استفاده از Query Hintها این است که با تغییرات آینده در دادهها، طرحهای اجرایی، یا حتی بهروزرسانیهای اسکیوال سرور، ممکن است کارایی را کاهش دهند (رگرسیون). هنگامی که یک Query Hint اعمال میشود، بهینهساز از کاوش در طرحهای جایگزین و تطبیق با شرایط جدید باز میماند. این بدان معناست که Query Hintها باید به طور مداوم نظارت و در صورت لزوم بهروزرسانی شوند، که بار عملیاتی قابل توجهی به همراه دارد.
مشکل رایج این است که مدیران پایگاه داده (DBAها) اغلب از Query Hintها به عنوان راهحلی سریع برای کوئریهای کند استفاده میکنند، بدون درک کامل عواقب بلندمدت آن. این روش ممکن است در کوتاهمدت مشکل را حل کند، اما در بلندمدت میتواند باعث ایجاد وابستگیهای پیچیده و دشواری در نگهداری شود.
برای مقابله با این چالشها، SQL Server Management Studio (SSMS) نسخه 19.2 (که در ابتدا با کد SSMS 22 شناخته میشد) ابزاری جدید به نام “Query Hint Recommendation” را معرفی کرده است. این قابلیت به توسعهدهندگان و DBAها کمک میکند تا با اتکا به تجزیه و تحلیل دقیق، تصمیمات آگاهانهتری در مورد Query Hintها بگیرند.
این ابزار مستقیماً در پنجره “Show Actual Execution Plan” یک کوئری در SSMS ادغام شده است. هنگامی که یک Actual Execution Plan را مشاهده میکنید، SSMS نقاطی را که میتوان Query Hint را به صورت بالقوه بهبود بخشید شناسایی میکند و پیشنهادهایی را ارائه میدهد.
برای استفاده از این ویژگی، ابتدا یک کوئری را که میخواهید تجزیه و تحلیل کنید، اجرا کنید. به عنوان مثال:
SELECT
p.ProductID,
p.Name AS ProductName,
SUM(sod.OrderQty) AS TotalOrderQty
FROM Production.Product p
JOIN Sales.SalesOrderDetail sod
ON p.ProductID = sod.ProductID
GROUP BY
p.ProductID,
p.Name
HAVING
SUM(sod.OrderQty) > 10000;
پس از اجرای کوئری با فعال بودن گزینه “Include Actual Execution Plan” (Ctrl+M)، به تب “Execution plan” بروید. در این تب، میتوانید نماد لامپ را در کنار اپراتورهایی که SSMS پیشنهاد Query Hint برای آنها دارد، مشاهده کنید.
با کلیک بر روی نماد لامپ، یک منو باز میشود که شامل جزئیات پیشنهاد Query Hint است. این پیشنهاد شامل نوع Hint، دلیل آن و گزینهای برای کپی کردن Hint به همراه کوئری اصلی است.
به عنوان مثال، ممکن است پیشنهادی برای افزودن OPTION (RECOMPILE) به کوئری خود دریافت کنید. این Hint میتواند برای کوئریهایی که پارامترهای مختلفی دارند و منجر به “parameter sniffing” میشوند، مفید باشد و اطمینان حاصل کند که هر بار یک طرح اجرای جدید کامپایل میشود.
مکانیزم پیشنهاددهنده این ابزار بر اساس موتور توصیهگر Query Store و قابلیتهای تنظیم خودکار SQL Server است. این موتور میتواند مشکلات کارایی رایج مانند استفاده از طرحهای اجرای نامناسب به دلیل تغییرات دادهها یا آمارههای قدیمی را شناسایی کند.
این ابزار بهطور خاص برای انواع زیر از Query Hintها پیشنهاد ارائه میدهد:
`OPTION (RECOMPILE)`
`OPTION (USE HINT (‘RECOMPILE’))`
`OPTION (USE HINT (‘FORCESEEK’))`
`OPTION (USE HINT (‘FORCESCAN’))`
وقتی SSMS پیشنهاد OPTION (RECOMPILE) را میدهد، به این معنی است که بهینهساز تشخیص داده است که طرح فعلی به دلیل استفاده مجدد از طرحهای کش شده قدیمی یا بهینه نبودن برای پارامترهای ورودی فعلی، ناکارآمد است.
ابزار پیشنهاددهنده Query Hint در SSMS 19.2 یک افزودنی ارزشمند برای جعبه ابزار DBAها و توسعهدهندگان است. این ابزار به کاهش نیاز به تحلیلهای دستی و گمانهزنی در مورد Query Hintها کمک میکند و رویکردی مبتنی بر داده برای بهینهسازی کارایی کوئریها فراهم میآورد. با استفاده از این ابزار، میتوان Query Hintها را با اطمینان بیشتری به کار برد و از مزایای آنها در بهبود عملکرد پایگاه داده بهرهمند شد، در عین حال که ریسک رگرسیون را به حداقل میرساند.