อาจารย์ตี๋ที่สอน Oracle
EN
← กลับไปหน้าบทความ
DBA

Tablespace กับ Datafile: เมื่อพื้นที่ใกล้เต็ม ต้องดูอะไรบ้าง?

TL;DR — สรุปสั้น

ตรวจ used space, ขนาดและเพดาน datafile, autoextend และพื้นที่ storage ก่อนเพิ่มพื้นที่

เมื่อระบบแจ้งเตือนว่า Tablespace ใกล้เต็ม เราจำเป็นต้องรีบเพิ่ม Datafile หรือขยายขนาดไฟล์ทันทีเลยหรือไม่? ก่อนที่จะตัดสินใจปรับเพิ่มพื้นที่ เรามาอ่านค่าจริงในระบบเพื่อแยกแยะให้ชัดเจนกันก่อนครับว่า ตัวเลขที่เห็นกำลังบอกถึงปริมาณการใช้งานจริง ขนาดไฟล์ปัจจุบัน หรือเพดานขยายขีดสุดของระบบ

Tablespace vs Datafile:

  • Tablespace: คือหน่วยจัดเก็บข้อมูลเชิงตรรกะ (Logical Storage) ที่แอปพลิเคชันและตารางต่าง ๆ มองเห็น
  • Datafile: คือไฟล์ข้อมูลจริงที่จัดเก็บอยู่ในระบบปฏิบัติการ (Physical Storage) หรือ ASM Disk Group โดยหนึ่ง Tablespace สามารถประกอบด้วย Datafile ได้ตั้งแต่หนึ่งไฟล์ขึ้นไป

(หมายเหตุ: ตัวอย่างในบทความนี้เป็นการอ่านค่าจาก Tablespace ชื่อ USERS ในสภาพแวดล้อม Lab ซึ่งยังไม่ได้อยู่ในสภาวะดิสก์เต็มจริง)


ภาพความสัมพันธ์เชิงแนวคิด จำนวนไฟล์ในภาพไม่ใช่จำนวนจาก Lab และเพดาน autoextend ไม่ใช่พื้นที่ว่างจริง

ภาพอธิบายแนวคิด: ภาพความสัมพันธ์เชิงแนวคิด จำนวนไฟล์ในภาพไม่ใช่จำนวนจาก Lab และเพดาน autoextend ไม่ใช่พื้นที่ว่างจริง

ขั้นที่ 1: ตรวจสอบเปอร์เซ็นต์การใช้งานจริง (Usage Metrics)

สำหรับบัญชีผู้ใช้ที่มีสิทธิ์อ่าน DBA Views สามารถตรวจสอบสัดส่วนการใช้พื้นที่ผ่าน DBA_TABLESPACE_USAGE_METRICS ได้ดังนี้:

SELECT tablespace_name, used_percent
FROM dba_tablespace_usage_metrics
WHERE tablespace_name = 'USERS';
TABLESPACE_NAME      USED_PERCENT
-------------------- ------------
USERS                    0.033176

1 row selected.

วิเคราะห์ผลลัพธ์:
USERS มีค่า USED_PERCENT เท่ากับ 0.033176% ซึ่งการคำนวณเปอร์เซ็นต์ของ View นี้ จะคิดคำนวณเปรียบเทียบกับ "ขนาดสูงสุดที่ Tablespace นั้นสามารถโตได้" (รวมเพดาน Autoextend) ไม่ใช่คิดจากพื้นที่ดิสก์จริงของระบบปฏิบัติการ หากโปรแกรม Client แสดงผลโดยปัดเศษทศนิยมเหลือ 1 ตำแหน่ง อาจเห็นเป็น 0.0% แต่ไม่ได้หมายความว่าไม่มีข้อมูลอยู่เลย


ขั้นที่ 2: ตรวจสอบขนาดไฟล์และคุณสมบัติ Autoextend

คำนวณแปลงหน่วยจาก Bytes เป็น MiB โดยการหารด้วย 1024 สองครั้ง เพื่อดูขนาดไฟล์ปัจจุบันและเพดานขยายสูงสุด:

SELECT file_id, 
       bytes / 1024 / 1024 AS size_mb,
       autoextensible, 
       maxbytes / 1024 / 1024 AS max_mb
FROM dba_data_files
WHERE tablespace_name = 'USERS';
FILE_ID    SIZE_MB AUT     MAX_MB
------- ---------- --- ----------
     15         72 YES   33554432

1 row selected.

วิเคราะห์ผลลัพธ์:

  • FILE_ID 15 มีขนาดปัจจุบัน (SIZE_MB) เท่ากับ 72 MiB
  • AUTOEXTENSIBLE (ย่อเป็น AUT บน Client) แสดงสถานะเป็น YES หมายถึงไฟล์นี้สามารถขยายขนาดตัวเองอัตโนมัติเมื่อข้อมูลเพิ่มขึ้น
  • MAX_MB เท่ากับ 33,554,432 MiB (หรือ 32 TiB) คือเพดานสูงสุดที่ตั้งค่าไว้ให้ไฟล์นี้ขยายไปถึงได้

ขั้นที่ 3: แยก "เพดานของไฟล์" ออกจาก "พื้นที่ดิสก์จริง"

แม้ว่า AUTOEXTENSIBLE จะเปิดเป็น YES และมีค่า MAXBYTES สูงมาก แต่การที่ไฟล์จะขยายขนาดได้จริงในทางปฏิบัตินั้น ต้องขึ้นอยู่กับปัจจัยภายนอกฐานข้อมูลด้วย:

  1. พื้นที่ดิสก์จริง (Physical Storage): โครงสร้างดิสก์ระดับ OS (Filesystem), ASM Disk Group หรือ Cloud Storage ต้องมีพื้นที่ว่างจริงรองรับ
  2. ข้อจำกัดระดับ PDB: ในสถาปัตยกรรม Multitenant อาจมีการตั้งค่าโควตาพื้นที่ (Storage Limit) กำกับไว้ที่ระดับ Pluggable Database (PDB) อีกชั้นหนึ่ง

ดังนั้น การสั่งเพิ่มค่า MAXBYTES หรือเปิด Autoextend เป็นเพียงการปรับเปลี่ยนตัวเลขขีดจำกัดเชิงตรรกะในฐานข้อมูลเท่านั้น แต่ไม่ได้เป็นการสร้างพื้นที่ดิสก์จริงขึ้นมาแต่อย่างใด


ขั้นที่ 4: ตรวจสอบแนวโน้มก่อนตัดสินใจแก้ไข (Best Practices)

เมื่อพบสัญญาณเตือนเรื่องพื้นที่เต็ม ควรปฏิบัติตามลำดับขั้นตอนดังนี้:

  1. หาสาเหตุการเติบโตผิดปกติ: ตรวจสอบก่อนว่ามี Segment, Table หรือ Index ใดที่มีข้อมูลเพิ่มขึ้นอย่างรวดเร็วผิดปกติหรือไม่ (เช่น มีการ Run Batch Process แล้วลืม Purge ข้อมูลทิ้ง)
  2. กรณีไม่ได้เปิด Autoextend: ตรวจสอบแผนการบริหารจัดการพื้นที่ร่วมกับ DBA ว่าควรใช้วิธี Resize เพิ่มขนาดไฟล์เดิม หรือขยายโดยการเพิ่ม Datafile ลูกใหม่
  3. กรณีเปิด Autoextend แต่ชนเพดาน (MAXBYTES): ให้ตรวจสอบว่าโครงสร้างดิสก์ระดับล่างสุด (ASM / OS) ยังมีพื้นที่เหลือเพียงพอหรือไม่ หากพื้นที่ดิสก์จริงเหลือน้อย ต้องแก้ปัญหาด้วยการขยาย Disk Group หรือ Storage ด้านล่างก่อน ไม่ใช่เพียงแค่แก้ตัวเลขในฐานข้อมูลครับ

อ่านหัวข้อ Oracle อื่นต่อได้ที่ บทความ Oracle บน teeDBA.com

#Oracle tablespace datafile#DBA_TABLESPACE_USAGE_METRICS#DBA_DATA_FILES#autoextend#Oracle storage

บทความที่เกี่ยวข้อง

DBA

อยากเรียน Oracle แต่ไม่รู้จะเริ่มตรงไหน? ลองเริ่มจากงานหนึ่งงาน

ไม่รู้จะเริ่มเรียน Oracle ตรงไหน? ลองเริ่มจากงานหนึ่งงาน ฝึก SQL ด้วยคำสั่งซื้อสามรายการ แล้วเลือกเรียน Database, Instance และ DBA ต่อให้เหมาะกับงาน

1 นาที