اگر در محیط SQL Server با بارهای سنگین تراکنشی یا تحلیلی کار میکنید، احتمالاً با مشکلی به نام TempDB Pressure مواجه شدهاید. این وضعیت باعث کندی کوئریها، افزایش Wait Stats و حتی Timeout میشود. اما نکته حیاتی اینجاست:
با پیکربندی و مدیریت هوشمند TempDB، میتوان فشار روی آن را کاهش داد، بدون اینکه نیاز به توقف سرویس یا downtime داشته باشید.
در این مقاله، به صورت عملی و گام به گام، تکنیکهایی ارائه میکنیم که در پروژههای واقعی باعث بهبود سرعت، کاهش Contention و افزایش پایداری TempDB شدهاند.
TempDB چیست و چرا فشار ایجاد میکند؟
TempDB یک دیتابیس سیستم موقت است که برای عملیات زیر استفاده میشود:
- Sort و Order By
- Worktables برای Viewهای پیچیده و CTE
- Temp Tables و Table Variables
- Version Store در Transaction Isolation Levelهای Snapshot/Read Committed Snapshot
- Row versioning برای In-Memory OLTP و Online Index Rebuild
وقتی TempDB بار زیاد یا Contention بالا داشته باشد:
- کوئریها معطل میشوند.
- Wait Stats مانند PAGELATCH_* و CXPACKET افزایش مییابد.
- کاربران کندی گزارشها یا Timeout را تجربه میکنند.
علائم فشار TempDB
- افزایش Wait Stats PAGELATCH_UP, PAGELATCH_EX
- کندی Insert/Update/Delete روی Temporary Objects
- Extended Events یا DMVs گزارش High Page Allocation
- هشدارهای Monitoring مربوط به Disk یا I/O
راهکارهای عملی کاهش TempDB Pressure بدون Downtime
۱. افزایش تعداد فایلهای TempDB
- SQL Server همیشه به صورت پیشفرض یک فایل TempDB دارد.
- توصیه: برای هر CPU logical core 1 فایل (حداکثر ۸–۱۲ فایل برای شروع)
- فایلها باید هم اندازه و در همان Drive باشند.
گام عملی:
ALTER DATABASE tempdb ADD FILE
(NAME = tempdev2, FILENAME = 'D:\TempDB\tempdb2.ndf', SIZE = 512MB, FILEGROWTH = 512MB);
افزایش تعداد فایلها باعث کاهش Latch Contention میشود.
۲. تخصیص مناسب Autogrowth و File Size
- همه فایلها را با اندازه ثابت و Autogrowth کوچک ایجاد کنید
- Autogrowth بسیار کوچک → Fragmentation و Slowdown
- Autogrowth بسیار بزرگ → Allocation Delay
توصیه عملی:
- همه فایلها یک اندازه باشند
- Autogrowth برابر با Initial Size (مثلاً 512MB–1GB)
- پیشبینی رشد و افزایش فضای اولیه
۳. قرار دادن TempDB روی SSD سریع یا NVMe
- TempDB I/O bound است.
- استفاده از SSD یا NVMe latency و Wait Stats را کاهش میدهد.
- اگر چند Volume دارید، میتوان فایلها را در چند Volume توزیع کرد (Striping)
۴. استفاده از Trace Flags و تنظیمات پیشرفته
- TF 1118: کاهش Page Split Contention در SQL Server < 2016
- TF 1117: تنظیم Growth همه فایلها یکسان
- SQL Server 2016+ از تنظیمات پیشرفته پیشفرض بهره میبرد.
- همیشه قبل از استفاده، تست کنید.
۵. بهینهسازی Workload و Temp Objectها
- حذف یا کاهش Temp Tables سنگین
- استفاده از Table Variables برای رکوردهای کوچک
- اجتناب از Queryهای Sort/Join پیچیده بدون Index مناسب
- بررسی Query Plans با Actual Execution Plan و SET STATISTICS IO ON
۶. مانیتورینگ و رصد TempDB
- DMVهای کلیدی:
SELECT * FROM sys.dm_db_file_space_usage;
SELECT * FROM sys.dm_db_file_stats;
SELECT * FROM sys.dm_os_waiting_tasks WHERE resource_description LIKE '%tempdb%';
- Extended Events برای Page Latch Contention
- مانیتورینگ I/O latency و disk queue
سناریو واقعی
سناریو: گزارش تحلیلی ETL روزانه، TempDB به سرعت 20GB پر میشد، Wait Stats PAGELATCH_EX شدید، کاربران شکایت از کندی داشتند.
راهکار اجرایی:
- تعداد فایلهای TempDB را از ۱ به ۸ افزایش دادند.
- همه فایلها هماندازه و Autogrowth 512MB
- TempDB را روی NVMe جداگانه منتقل کردند.
- Queryهای Temp Table را با Table Variable بهینه کردند.
نتیجه:
- Wait Stats به شدت کاهش یافت
- ETL سریعتر شد (۲۵٪ کاهش زمان)
- Downtime صفر
نتیجهگیری
مدیریت TempDB یکی از مهمترین عوامل Performance Tuning در SQL Server است. با رعایت این نکات:
- Wait Stats کاهش مییابد.
- فشار TempDB کمتر میشود.
- کاربران تجربه سریعتر گزارشها دارند.
- Downtime برای بهینهسازی نیاز نیست.
سوالات متداول (FAQ)
۱. آیا تغییر فایل TempDB نیاز به Restart دارد؟
- برای اضافه کردن فایل نیازی به Restart نیست.
- برای تغییر مکان TempDB باید SQL Server Restart شود.
۲. چند فایل TempDB کافی است؟
توصیه: ۱ فایل برای هر CPU logical core (حداکثر ۸–۱۲ فایل شروع کنید)
۴. آیا SSD الزامی است؟
الزامی نیست، ولی برای Workload سنگین توصیه جدی است.
۵. TF 1118 و ۱۱۱۷ هنوز مفیدند؟
SQL Server 2016+ پیشفرضها بهتر هستند، ولی برای نسخههای قدیمی عالی است.
تماس و درخواست مشاوره و آنالیز TempDB با لاندا
اگر TempDB شما:
- Wait Stats بالا دارد.
- Contention ایجاد میکند.
- یا قصد بهینهسازی بدون downtime دارید.
لاندا میتواند تحلیل کامل TempDB، تنظیم فایلها، Autogrowth و Workload Optimization انجام دهد.

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

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