
اگر با Oracle Database کار میکنید، احتمال زیاد اسم Temporary Tablespace را شنیدهاید. این بخش یکی از اجزای مهم پایگاهداده است که مستقیماً روی عملکرد کوئریها، Sort، Join و پردازشهای موقت تأثیر میگذارد.
Temporary Tablespace یا فضای جدول موقت بخشی از دیتابیس Oracle است که برای نگهداری دادههای موقتی در زمان اجرای عملیات استفاده میشود.
در این مقاله آموزش اوراکل، از بخش آموزش مدیریت اوراکل، توضیح میدهم که Temporary Tablespace چیست و چه کاربردی دارد.
در این مقاله شما می خوانید
Temporary Tablespace واقعاً چه کاری انجام میدهد؟
تصور کنید در حال مرتب کردن هزاران برگه کاغذ (داده) روی میز کارتان هستید. اگر میز شما کوچک باشد و نتوانید همه برگهها را پهن کنید، باید بخشی از آنها را روی زمین بگذارید تا بتوانید کارتان را تمام کنید. در اوراکل:
- میز کار شما: حافظه اصلی یا همان PGA است.
- فضای روی زمین: همان Temporary Tablespace است.
وقتی کوئریهای شما خیلی سنگین میشوند (مثلاً یک ORDER BY روی چند میلیون ردیف یا یک HASH JOIN بزرگ)، اوراکل اگر ببیند حافظه RAM کافی نیست، دادههای میانی را به فضای موقت روی دیسک (Temp Tablespace) منتقل میکند تا پردازش انجام شود.
- مرتبسازیهای بزرگ: استفاده از
ORDER BYیاGROUP BYدر جداول حجیم. - عملیات JOIN: زمانی که دو جدول بزرگ با هم ترکیب میشوند (Hash Joins).
- توابع تحلیلی: استفاده از
RANKیاWINDOW FUNCTIONS. - ساخت ایندکس: هنگام عملیات
CREATE INDEXکه نیاز به فضای کاری دارد.
به جای استفاده از تنظیمات پیشفرض، بیایید یک فضای موقت استاندارد بسازیم که هم پرفورمنس بالایی داشته باشد و هم مدیریتاش ساده باشد:
CREATE TEMPORARY TABLESPACE temp_pro_data
TEMPFILE '/u01/oradata/temp02.dbf' SIZE 1G
AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
نکته تخصصی: حتماً برای آن MAXSIZE تعیین کنید تا اگر یک کوئری اشتباه، کل فضای دیسک سرور شما را گرفت، دیتابیس دچار بحران نشود.
مانیتورینگ: کدام کاربر الان دارد فضای Temp من را پر میکند؟
شاید برایتان سوال باشد که «کدام کاربر الان دارد فضای Temp من را پر میکند؟». با این کوئری ساده میتوانید وضعیت را به صورت زنده ببینید:
SELECT s.username, s.sid, s.serial#, t.blocks * 8192 / 1024 / 1024 AS MB_USED
FROM v$sort_usage t, v$session s
WHERE t.session_addr = s.saddr;
این دستور به شما میگوید کدام کاربر (یا کدام SID) در حال حاضر بیشترین فشار را به فضای موقت وارد میکند.
۳ نکته طلایی برای متخصصین دیتابیس
- همیشه از Locally Managed استفاده کنید: خوشبختانه در نسخههای جدید اوراکل این مورد پیشفرض است، اما مطمئن شوید که هرگز از نوع
Dictionary Managedاستفاده نمیکنید (چون باعث ایجاد ترافیک در Dictionary میشود). - Tempfile را روی SSD بگذارید: چون اوراکل مدام در حال نوشتن و خواندن از این فضا است، سرعت هارد دیسکِ محل قرارگیری
Tempfileتاثیر مستقیم روی سرعت کوئریهای شما دارد. - پاکسازی بعد از شلوغی: گاهی اوقات فایلهای Temp بیش از حد بزرگ میشوند. در نسخههای ۱۱g به بعد میتوانید با دستور زیر فضای اضافی را به سیستمعامل برگردانید:
ALTER TABLESPACE temp SHRINK SPACE;
سوالات متداول درباره Temporary Tablespace در اوراکل
این یک تصور غلط است که RAM زیاد همه مشکلات را حل میکند! وقتی کوئری شما به قدری سنگین است که دادههای مورد نیاز برای مرتبسازی (Sort) از پارامتر PGA_AGGREGATE_TARGET فراتر میرود، اوراکل مجبور است دادهها را به دیسک (Temp Tablespace) بفرستد.
- راهکار: به جای صرفاً اضافه کردن RAM، ابتدا با استفاده از
V$SQL_WORKAREA_ACTIVEبررسی کنید که آیا کوئری شما «Optimal» اجرا میشود یا «Multipass». اگر Multipass است، یعنی کوئری شما نیاز به بهینهسازی (ایندکسگذاری یا بازنویسی منطق SQL) دارد، نه فقط افزایش سختافزار.
بله! استفاده از Temp Tablespace Group یکی از ترفندهای حرفهای برای جلوگیری از گلوگاه (Bottleneck) در دیتابیسهای شلوغ است.
وقتی چند Temp Tablespace را در یک گروه قرار میدهید، اوراکل به صورت تصادفی بارِ کاریِ سشنهای مختلف را بین این فایلها پخش میکند.
- مزیت: این کار باعث کاهش رقابت (Contention) بر روی فایلهای دیسک میشود و سرعت پاسخدهی در سیستمهای OLTP که کاربران زیادی دارند، به طرز چشمگیری افزایش مییابد.
بسیاری از مدیران دیتابیس نگران رشد بیرویه فایلهای Temp هستند.
خبر خوب این است که از نسخه ۱۱g به بعد، نیازی به بازسازی (Drop و Create) نیست.
- دستور طلایی: با اجرای دستور
ALTER TABLESPACE temp_name SHRINK SPACE;اوراکل تلاش میکند فضای خالیِ انتهای فایل را به سیستمعامل بازگرداند. اگر میخواهید همه فایلهای گروه را همزمان خالی کنید، ازALTER TABLESPACE temp_group_name SHRINK SPACE;استفاده کنید.
استفاده از دیسکهای معمولی برای Temp Tablespace میتواند «قاتلِ خاموش»ِ پرفورمنس دیتابیس شما باشد. از آنجایی که اوراکل در عملیاتهای سنگین (مانند Joinهای بزرگ)، حجم زیادی از داده را مدام در این فضا مینویسد و میخواند، تأخیر (Latency) در دیسک، کل پردازش را کند میکند.
- پیشنهاد: حتماً
Tempfileها را روی سریعترین استوریجی که دارید (بهترین گزینه NVMe یا SSD و در مرحله بعد RAID 10) قرار دهید. این تغییر کوچک، تأثیر بزرگی در سرعت گزارشگیریهای سنگین خواهد داشت.
جمعبندی
Temporary Tablespace فقط یک فضای جانبی نیست؛
این بخش، ریههای تنفسی دیتابیس شما در هنگام انجام عملیاتهای سنگین است. اگر آن را درست تنظیم کنید، کوئریهای شما روانتر اجرا میشوند و خطاهای عجیبِ پر شدن حافظه را دیگر نخواهید دید.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید