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

چک‌لیست Performance دیتابیس، افزایش سرعت دیتابیس، Database Performance،‌ بهینه‌سازی کوئری SQL، رفع کندی دیتابیس 1404/9/1
نویسنده: مدرس بهمن آبادی

چک‌لیست کامل و عملی 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_stats

    • sys.dm_db_index_usage_stats

    • sys.dm_os_wait_stats

۱۳) بهینه‌سازی امنیتی (Security Performance)

  • دسترسی‌های اضافی را حذف کنید

  • از SCHEMABINDING برای View مهم استفاده کنید

  • از Row-Level Security فقط در جای ضروری استفاده کنید

۱۴) بهینه‌سازی طراحی دیتابیس (Database Design)

  • نرمال‌سازی منطقی

  • Denormalization در موارد ضروری

  • شناسایی Bottleneckهای طبیعی

  • افقی‌سازی (Sharding) برای داده‌های خیلی بزرگ

  • Vertical Partitioning برای ستون‌های سنگین

جمع‌بندی برای اجرا

بسیاری از موارد ذکر شده در بالا در دوره جامع برنامه نویسی وب مهندس بهمن آبادی آموزش داده می شود.

برای عملکرد عالی دیتابیس باید روی این ۵ ستون تمرکز کنید:

  1. Query Optimization

  2. Indexing

  3. Disk / RAM / CPU

  4. Locking / Blocking

  5. طراحی صحیح دیتابیس

منابع و مراجع

  • 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