
اگر در دنیای مدیریت پایگاه دادههای اوراکل کار میکنید، یکی از مهمترین مفاهیمی که باید بشناسید، “Segment” است.
شاید اسمش ساده به نظر برسد، اما پشت این واژه، ساختاری حیاتی برای نگهداری دادهها، مدیریت فضا و بهینهسازی عملکرد قرار دارد.
در این مقاله آموزش Oracle ، بدون پیچیدگیهای آکادمیک، قرار است همه چیز درباره Segment در Oracle را یاد بگیرید — از تعریف و انواع آن گرفته تا مثالهای کاربردی و نکات حرفهای برای بهینهسازی.
اگر می خواهید با ساختار و معماری پایگاه داده اوراکل بیشتر آشنا بشید، پیشنهاد می شود نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
Segment چیست؟ (به زبان ساده)
در اوراکل، Segment یعنی فضایی از دیتابیس که برای نگهداری دادههای یک شیء خاص مثل جدول، ایندکس یا فایلهای حجیم اختصاص داده شده.
در واقع هر بار که شما یک جدول میسازید، اوراکل پشتصحنه برای آن جدول یک Segment ایجاد میکند تا دادههای مربوطه در آن ذخیره شوند.
📐 سلسلهمراتب ذخیرهسازی در اوراکل
برای درک بهتر Segment، بیایید ابتدا ساختار ذخیرهسازی اوراکل را بشناسیم:
Tablespace
└── Datafile
└── Segment
└── Extent
└── Block
- Block: کوچکترین واحد ذخیرهسازی (معمولاً ۸KB یا ۱۶KB)
- Extent: چند بلاک کنار هم
- Segment: مجموعهای از Extentها برای یک شیء خاص
- Tablespace: فضای منطقی نگهداری سگمنتها که روی دیسک قرار میگیرد
🧱 انواع Segment در Oracle
در Oracle، هر نوع داده یا ساختار ذخیرهای، سگمنت مخصوص به خودش را دارد:
نوع Segment | کاربرد |
---|---|
Table Segment | ذخیره رکوردهای جدول |
Index Segment | نگهداری اطلاعات ایندکسها |
LOB Segment | ذخیره فایلهای بزرگ مثل عکس و PDF |
Temporary Segment | استفاده موقت در کوئریهای سنگین |
Undo Segment | نگهداری اطلاعات بازگشتی برای تراکنشها |
Cluster Segment | برای جداول کلستر شده |
🧪 یک مثال ساده: وقتی جدول میسازیم، چه اتفاقی میافتد؟
CREATE TABLE customers (
id NUMBER,
name VARCHAR2(100)
);
وقتی این دستور اجرا شود:
- یک Table Segment بهطور خودکار ساخته میشود
- این سگمنت داخل Tablespace پیشفرض کاربر (مثلاً
USERS
) قرار میگیرد - با وارد کردن داده، Extentهایی به این سگمنت اختصاص داده میشود
🔍 چطور سگمنتها را ببینیم و بررسی کنیم؟
میتوانید اطلاعات کامل سگمنتها را با این کوئری ببینید:
SELECT segment_name, segment_type, tablespace_name,
bytes/1024/1024 AS size_mb
FROM dba_segments
WHERE owner = 'HR';
یا برای دیدن حجم اشغالشده توسط جدول خاص:
SELECT bytes/1024/1024 AS size_mb
FROM dba_segments
WHERE segment_name = 'CUSTOMERS'
AND owner = 'HR';
📈 رشد سگمنتها: چطور انجام میشود؟
سگمنتها وقتی دادههای جدید وارد شوند، به صورت خودکار بزرگتر میشوند. به این صورت:
- در ابتدا یک Extent کوچک اختصاص داده میشود
- اگر پر شود، Extentهای بعدی اضافه میشوند
- این فرآیند ادامه دارد تا وقتی که فضای مجاز Tablespace پر شود
💡 نکته: رشد غیرقابلکنترل سگمنتها میتواند باعث Fragmentation و کاهش کارایی شود
⚙️ مدیریت و بهینهسازی سگمنتها
🔹 ۱. آزادسازی فضای خالی (Shrink)
ALTER TABLE customers SHRINK SPACE;
🔹 ۲. جابهجایی سگمنت به Tablespace دیگر
ALTER TABLE customers MOVE TABLESPACE new_tbs;
🔹 ۳. حذف کامل سگمنت (همراه با جدول)
DROP TABLE customers PURGE;
بدون PURGE
، جدول به Recycle Bin میرود و سگمنت هنوز روی دیسک باقی میماند!
🧩 نکات نهایی برای حرفهایها
- استفاده از
Segment Statistics
و ابزارهایی مثل AWR Report میتواند سگمنتهای سنگین را شناسایی کند. - سگمنتهای LOB معمولاً فضای زیادی اشغال میکنند و نیاز به مدیریت جداگانه دارند.
- اگر حجم دیتابیس بالا میرود، بررسی رشد سگمنتها یک وظیفه مهم برای DBA است.
سوالات متداول درباره Segment در Oracle
به فضایی منطقی که برای ذخیرهسازی دادههای یک شیء مثل جدول یا ایندکس استفاده میشود.
با کوئری روی DBA_SEGMENTS
میتوانید نام، نوع، Tablespace و سایز آن را ببینید.
وقتی رکوردهای زیادی را حذف کردهاید و فضای فیزیکی هنوز آزاد نشده است، دستور SHRINK SPACE
توصیه میشود.
بله. با وارد شدن داده جدید، Extent جدید به سگمنت اضافه میشود (Auto Extend).
🏁 جمعبندی
اگر به عنوان مدیر پایگاه داده، توسعهدهنده PL/SQL یا حتی کاربر حرفهای Oracle کار میکنید، باید مفهوم Segment را مثل کف دستتان بشناسید.
این مفهوم کلیدی به شما کمک میکند تا فضای دیسک را بهتر مدیریت کنید، از رشد بیرویه دیتا جلوگیری کرده و کارایی سیستم را در سطحی بالا حفظ کنید.
📢 مقاله را مفید دیدید؟ برای همکارانتان بفرستید. یا اگر سوالی درباره Segment یا بهینهسازی Oracle دارید، همینجا بپرسید!🚀
دیدگاهتان را بنویسید