بهینهسازی عملکرد SQL Server یکی از حیاتیترین مراحل برای تضمین موفقیت سیستمهای سازمانی است. با افزایش حجم دادهها و رشد کاربران، فشار روی موتور پایگاهداده افزایش مییابد.
کوچکترین ضعف در طراحی جداول، ایندکسها، کوئریها یا ساختار ذخیرهسازی میتواند منجر به کاهش سرعت، مصرف بالای منابع و تجربه کاربری ضعیف شود.
در این مقاله، یک چکلیست جامع و عملی برای Performance Tuning ارائه میدهیم که سازمانها میتوانند بلافاصله پیادهسازی کنند و از مشکلات رایج جلوگیری کنند.
۱. ایندکسها (Indexing)
چرا ایندکس اهمیت دارد؟
ایندکسها عملکرد SQL Server را به شکل قابل توجهی بهبود میدهند. اما طراحی نادرست ایندکسها میتواند اثر معکوس داشته باشد.
باید انجام دهید
- ستونهایی که در WHERE، JOIN، ORDER BY استفاده میشوند، ایندکس داشته باشند.
- روی ستونهای با High Selectivity ایندکس ایجاد کنید.
- ایندکسهای ترکیبی (Composite Index) را طوری بسازید که ستونهای فیلترشونده اول قرار گیرند.
- برای ستونهای GUID از
newsequentialid()استفاده کنید تا Fragmentation کاهش یابد.
نباید انجام دهید
- ایندکس روی ستونهای با Low Selectivity مانند جنسیت، وضعیت یا فعال/غیرفعال ایجاد نکنید.
- روی تمام ستونها ایندکس نگذارید، زیرا Insert/Update/Delete کند میشود.
۲. بهینهسازی Queryها
کوئریها مهمترین عامل سرعت پایگاهداده هستند. نوشتن صحیح کوئریها باعث کاهش مصرف منابع و بهبود پاسخگویی میشود.
باید انجام دهید
- از
SELECT *استفاده نکنید و فقط ستونهای مورد نیاز را واکشی کنید. - از Subqueryهای غیرضروری پرهیز کنید و تا جای ممکن از JOIN استفاده کنید.
- از
EXISTSبهجایINاستفاده کنید، زیرا سریعتر است. - فیلترهای
%LIKEرا بهصورتprefix%بنویسید، نه%contains%.
نباید انجام دهید
- JOIN روی ستونهای بدون ایندکس انجام دهید.
- WHERE روی ستونهای محاسبهشده اعمال نکنید.
- عملیات CAST/CONVERT روی ستونهای اصلی کوئری اعمال نکنید.
۳. بررسی Execution Plan
مواردی که باید چک شوند
- Scans غیرضروری (Table Scan / Index Scan)
- Missing Index Hints
- Key Lookupهای زیاد
- Sort و Hash Match سنگین
- Parallelism بیش از حد
راهکارها
- با اضافه کردن ایندکس، Scanها را به Seek تبدیل کنید.
- Key Lookup را با Covering Index حذف کنید.
۴. بهینهسازی ساختار جداول
باید انجام دهید
- ستونهای بزرگ مثل
NVARCHAR(MAX)را در جداول جداگانه قرار دهید. - اندازه ستونها را بهینه کنید (
NVARCHAR(50)بهجایNVARCHAR(MAX)). - از Defaultهای مناسب استفاده کنید تا NULLهای غیرضروری کاهش یابد.
نباید انجام دهید
- ذخیره فایلهای بزرگ در ستونهای دیتابیس مگر با FILESTREAM
- ذخیره JSON بزرگ بدون ایندکس مناسب
- ذخیره تاریخها بهصورت NVARCHAR
۵. بهینهسازی عملیات نوشتن (Write Performance)
باید انجام دهید
- استفاده از Bulk Insert برای دادههای حجیم
- حذف Triggerهای سنگین
- استفاده از Transactionهای کوتاه
نباید انجام دهید
- Commit نکردن Transactionهای طولانی
- ذخیره دادههای غیرضروری
- اجرای Update/Delete بزرگ بدون Batch بندی
۶. بهینهسازی Locking و Blocking
- از
WITH (NOLOCK)فقط در گزارشگیری استفاده کنید. - از Isolation Level مناسب (مثلاً Read Committed Snapshot) استفاده کنید.
- کوئریهای کند را بهینه کنید تا Lock طولانی ایجاد نشود.
۷. بهینهسازی TempDB
- ایجاد چند فایل TempDB با اندازه مساوی
- قرار دادن TempDB روی دیسک سریع
- بررسی Queryهایی که TempDB را بیش از حد استفاده میکنند (Sort، Hash، Group)
۸. بهینهسازی Memory و Cache
- تخصیص RAM کافی برای SQL Server
- تنظیم Max Server Memory (مثلاً ۷۰–۸۰٪ RAM)
- اصلاح Queryهایی که باعث Spill به TempDB میشوند
۹. بهینهسازی Disk I/O
- دیتابیس روی SSD قرار گیرد
- Log File روی دیسک سریع و مستقل قرار گیرد
- استفاده از RAID مناسب (RAID 10 بهترین گزینه)
۱۰. نگهداری دیتابیس (Maintenance)
- Rebuild و Reorganize ایندکسها منظم
- Update Statistics خودکار یا دستی
- Backupهای منظم
- از Shrink کردن دیتابیس مگر در موارد ضروری خودداری کنید
۱۱. بهینهسازی ساختار برنامه (Application Layer)
- استفاده از Pagination (واکش کل دیتا ممنوع)
- Cache کردن نتایج تکراری
- استفاده از Stored Procedure برای Queryهای سنگین
- استفاده از Connection Pooling
۱۲. مانیتورینگ و Logging Performance
ابزارهای کلیدی:
- SQL Server Profiler
- Extended Events
- Performance Monitor
- DMVs مانند:
sys.dm_exec_query_statssys.dm_db_index_usage_statssys.dm_os_wait_stats
۱۳. بهینهسازی امنیتی (Security Performance)
- حذف دسترسیهای اضافی
- استفاده از SCHEMABINDING برای Viewهای مهم
- استفاده از Row-Level Security فقط در موارد ضروری
۱۴. طراحی دیتابیس (Database Design)
- نرمالسازی منطقی
- Denormalization در موارد ضروری
- شناسایی Bottleneckهای طبیعی
- افقیسازی (Sharding) برای دادههای بزرگ
- Vertical Partitioning برای ستونهای سنگین
جمعبندی و ستونهای کلیدی برای Performance
برای دستیابی به عملکرد عالی در SQL Server، روی این پنج ستون تمرکز کنید:
- Query Optimization
- Indexing
- Disk / RAM / CPU
- Locking / Blocking
- طراحی صحیح دیتابیس
با رعایت این چکلیست، علاوه بر افزایش سرعت، پایداری و مقیاسپذیری دیتابیس تضمین میشود و هزینههای نگهداری کاهش مییابد.
سوالات متداول (FAQ)
آیا همه موارد باید همزمان اجرا شوند؟
خیر، اجرای مرحلهای و اولویتبندی شده بر اساس مشکل موجود پیشنهاد میشود.
آیا ابزارهای مانیتورینگ لازم است؟
بله، ابزارها کمک میکنند عملکرد را پایش و نقاط ضعف را سریع شناسایی کنید.
آیا این چکلیست فقط برای SQL Server مناسب است؟
اصول کلی آن برای اکثر پایگاههای داده رابطهای قابل استفاده است، اما تنظیمات اختصاصی برای هر DBMS لازم است.
مشاوره و تماس
برای بهینهسازی عملی و افزایش پایداری SQL Server سازمان شما، تیم کارشناسی لاندا آماده ارائه خدمات مشاوره و اجرای Performance Tuning حرفهای است.
هماکنون با کارشناسان لاندا تماس ✆ بگیرید و چکلیست شخصیسازی شده برای سازمان خود دریافت کنید.

و سپس «افزودن به صفحه اصلی» ضربه بزنید
و سپس «افزودن به صفحه اصلی» ضربه بزنید

نظری داده نشده