چکلیست کامل و عملی Performance Tuning در دیتابیس
چکلیست کامل و عملی Performance Tuning در دیتابیس

مقدمه
بهینهسازی عملکرد پایگاهداده یکی از مهمترین گامها در طراحی و نگهداری هر سیستم نرمافزاری است. هرچه حجم دادهها افزایش یابد و تعداد کاربران بیشتر شود، فشار بیشتری بر موتور پایگاهداده وارد میشود و در نتیجه، کوچکترین ضعف در طراحی جداول، ایندکسها، کوئریها یا ساختار ذخیرهسازی میتواند باعث کندی محسوس، افزایش مصرف منابع سرور و کاهش تجربهٔ کاربری شود.
۱) ایندکسها (Indexing)
✔ باید انجام دهید:
بررسی کنید که ستونهای استفادهشده در 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
✔ مواردی که باید در Execution Plan چک کنید:
Scans غیرضروری (Table Scan / Index Scan)
Missing Index Hints
Key Lookupهای زیاد
Sort و Hash Match سنگین
Parallelism بیش از حد
راهحلها:
با اضافهکردن ایندکس، Scanها را به Seek تبدیل کنید.
Key Lookup را با ایندکس پوششی (Covering Index) حذف کنید.
۴) بهینهسازی ساختار جداول
✔ باید انجام دهید:
ستونهای بزرگ مثل NVARCHAR(MAX) را در جداول جداگانه (Archive / FileTable) قرار دهید.
اندازهٔ ستونها را بهینه کنید (NVARCHAR(50) بهجای NVARCHAR(MAX)).
از Defaultهای مناسب استفاده کنید تا NULLهای غیرضروری کاهش یابد.
نباید انجام دهید:
ذخیره فایلهای بزرگ در ستونهای دیتابیس مگر با FILESTREAM
ذخیره JSON بزرگ بدون ایندکس مناسب
ذخیره تاریخها بهصورت NVARCHAR
۵) بهینهسازی عملیات نوشتن (Write Performance)
✔ باید انجام دهید:
استفاده از Bulk Insert برای ورود دادههای حجیم
حذف Triggerهای سنگین
استفاده از Transactionهای کوتاه (Long Transactions باعث Lock و Block میشود)
نباید انجام دهید:
Commit نکردن Transactionهای طولانی
ذخیره دیتای غیرضروری
اجرای Update/ Delete بزرگ بدون Batch بندی
۶) بهینهسازی Locking / Blocking
✔ باید انجام دهید:
از WITH (NOLOCK) فقط در گزارشگیری استفاده کنید.
از Isolation Level مناسب استفاده کنید (مثلاً Read Committed Snapshot).
Queryهای کند را بهینه کنید تا Lock طولانی ایجاد نشود.
۷) بهینهسازی TempDB
✔ باید انجام دهید:
ایجاد چند فایل TempDB (مساوی در اندازه)
قرار دادن TempDB روی دیسک سریع
بررسی Queryهایی که از TempDB زیاد استفاده میکنند (Sort، Hash، Group)
۸) بهینهسازی Memory و Cache
✔ باید انجام دهید:
مقدار RAM کافی برای SQL Server تخصیص دهید.
Max Server Memory را تنظیم کنید (مثلاً 70–80 درصد RAM).
Queryهای دارای Spill به TempDB را اصلاح کنید.
۹) بهینهسازی Disk I/O
✔ باید انجام دهید:
دیتابیس را روی SSD قرار دهید.
Log File را روی یک دیسک سریع مستقل قرار دهید.
از RAID مناسب استفاده کنید (RAID 10 بهترین برای دیتابیس).
۱۰) نگهداری دیتابیس (Maintenance)
✔ باید انجام دهید:
Rebuild و Reorganize ایندکسها بهطور منظم
Update Statistics خودکار یا دستی
Backupهای منظم برای جلوگیری از Log رشد بیرویه
Shrink نکردن دیتابیس مگر ضرورت کامل
۱۱) بهینهسازی ساختار برنامه (Application Layer)
✔ باید انجام دهید:
استفاده از Pagination (نه واکشی کل دیتا)
Cache کردن نتایج تکراری در برنامه
استفاده از Stored Procedure برای Queryهای سنگین
استفاده از Connection Pooling
۱۲) مانیتورینگ و Logging Performance
ابزارهای مهم SQL Server:
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 برای ستونهای سنگین
جمعبندی برای اجرا
بسیاری از موارد ذکر شده در بالا در دوره جامع برنامه نویسی وب مهندس بهمن آبادی آموزش داده می شود.
برای عملکرد عالی دیتابیس باید روی این ۵ ستون تمرکز کنید:
Query Optimization
Indexing
Disk / RAM / CPU
Locking / Blocking
طراحی صحیح دیتابیس
منابع و مراجع
Microsoft SQL Server Performance Tuning Guide
Microsoft Docs: Query Performance & Indexing
Microsoft Docs: Execution Plan Reference
Inside SQL Server Query Tuning – Itzik Ben-Gan
SQL Server Internals – Kalen Delaney