oracleskill

Home TUTORIAL ความแตกต่างของ AUTOALLOCATE กับ UNIFORM extent allocation

ความแตกต่างของ AUTOALLOCATE กับ UNIFORM extent allocation

ตั้งแต่ Oracle 9i  เป็นต้นมา DBA สามารถสร้าง tablespace แบบ locally managed ได้  ซึ่ง Locally Managed tablespace  นี้ มีความสามารถ จัดการ free extent ของตัวเองได้ โดยเก็บเป็น bitmap block เอาไว้ภายใน header ของ data files ไฟล์แรก ที่สังกัด tablespace ของมัน  ซึ่งใน bitmap block นั้น แต่ละ bit จะไป map กับ free block แต่ะละอัน ใน tablespace

 

เมื่อสร้าง locally managed tablespace  เราสามารถเลือกวิธี allocated extenet ได้ ดังนี้

AUTOALLOCATE

Oracle เป็นตัวจัดการขนาดของ extent ให้  oracle จะเลือก ขนาดถัดไปแบบ optimal เริ่มจาก 64 KB   และเมื่อ segment มีขนาดโตขึ้น จนต้องการ extent เพิ่ม  oracle จะ allocate  extent ถัดไป ใหญ่ขึ้น  ใหญ่ขึ้น .. จนมีขนาด ตั้งแต่ช่วง  1MB จนถึง 64 MB   การ allocate แบบนี้ช่วยประหยัดพื้นที่ว่าง แต่ทำให้เกิด fragmentation     วิธี allocate แบบ auto นี้ เหมาะสำหรับ ตารางขนาดเล็ก หรือ ระบบที่ไม่ต้องการมาจัดการมากนัก

 

UNIFORM

การขยายขนาด จะจองพื้นที่ extent ถัดไป ให้มีขนาดเท่าๆกันตลอด  ซึ่งขนาดของ extent ถัดไป จะกำหนดให้เป็นหน่วย MB หรือ KB ก็ได้  โดยทั่วไปแล้ว UNIFORM extent allocation มีขนาด 1MB เป็น default     การใช้ uniform extent จะช่วยลด fragmentation จึงทำให้ performance โดยรวมดีขึ้นสร้างแบบ Command-Line
SQL> CREATE TABLESPACE oracleskill_tbs  
DATAFILE '/u01/oradata/oracleskill_tbs01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SQL> CREATE TABLESPACE oracleskill_tbs  
DATAFILE '/u01/oradata/oracleskill_tbs01.dbf' SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K;

สร้างแบบใช้ Enterprise Manager Database Control

แท็บ General เลือก Extent Management แบบ Locally Managed

สร้าง tablespace  extent management แบบ Locally Managed

 

แท็บ Storage  เลือก Extent Allocation แบบ Automatic หรือ Uniform

เลือก Extent Allocation แบบ Automatic หรือ Uniform

 

คำแนะนำ

 ให้ ใช้ UNIFORM  size tablespaces   กับ ตารางที่มีขนาดใหญ่  และ ใช้ AUTOALLOCATE size tablespaces กับ ตารางที่มีขนาดเล็ก หรือ ตาราง ที่อยู่ในระบบที่ไม่ต้องมีการจัดการมากนัก