PlusMagi's Blog By Pitt Phunsanit Backend,Database Heap Memory คืออะไร

Heap Memory คืออะไร

ในโลกของระบบฐานข้อมูลขนาดใหญ่ (Database Systems) การทำความเข้าใจว่าข้อมูลถูกจัดเก็บที่ใดและอย่างไรถือเป็นหัวใจสำคัญของการปรับปรุงประสิทธิภาพ (Performance Tuning) หนึ่งในแนวคิดพื้นฐานที่นักพัฒนาและ System Architect ต้องรู้คือเรื่องของ Heap Memory

สำหรับผู้ที่คุ้นเคยกับแนวคิดของหน่วยความจำในระดับระบบปฏิบัติการ (OS Memory) อาจเกิดความสับสนได้ แต่เมื่อพูดถึง Heap Memory ในบริบทของ PostgreSQL เราไม่ได้หมายถึงหน่วยความจำของระบบโดยรวม แต่หมายถึง พื้นที่จัดเก็บข้อมูลจริง (Data Storage Area) ที่ PostgreSQL ใช้ในการเก็บแถวข้อมูล (Tuples) ของตาราง (Table) ต่างๆ ครับ

🔬 Heap Memory คืออะไรในมุมมองของ PostgreSQL?

ใน PostgreSQL, Heap คือพื้นที่จัดเก็บข้อมูลแบบไม่เป็นระเบียบ (Unstructured/Unordered Storage) ที่ถูกออกแบบมาเพื่อรองรับการจัดเก็บข้อมูลจำนวนมากและมีขนาดแตกต่างกันไป (Variable Size) ข้อมูลที่ถูกจัดเก็บใน Heap จะเรียกว่า Tuples (แถวข้อมูล) ซึ่งแตกต่างจากการจัดเก็บข้อมูลในโครงสร้างที่ถูกกำหนดขนาดตายตัว เช่น Index B-Tree หรือ Stack Memory ที่มีโครงสร้างที่เข้มงวดกว่า

ลักษณะเด่นของการจัดเก็บแบบ Heap ใน PostgreSQL

  • ความยืดหยุ่นสูง (Flexibility): Heap สามารถรับข้อมูลที่มีขนาดไม่แน่นอนได้ ทำให้เหมาะสำหรับการเก็บข้อมูลหลักของตาราง (Primary Data) ที่มีโครงสร้างซับซ้อนหรือขนาดของคอลัมน์ที่แตกต่างกัน
  • การเข้าถึงข้อมูล: เมื่อมีการ Query ข้อมูล PostgreSQL จะทำการค้นหาตำแหน่งของ Tuple ใน Heap ตามที่ระบุไว้ใน Index (ถ้ามี) และดึงข้อมูลเหล่านั้นออกมา
  • การจัดการพื้นที่: PostgreSQL มีกลไกในการจัดการพื้นที่ว่าง (Free Space) และการอัปเดตข้อมูล (UPDATE) ซึ่งอาจทำให้เกิดพื้นที่ที่ไม่ได้ใช้งาน (Dead Tuples) ซึ่งเป็นสิ่งที่ต้องทำความเข้าใจเพื่อการทำ Vacuuming

💡 ตัวอย่างการทำงาน: การจัดเก็บข้อมูลในตาราง

สมมติว่าเรามีตาราง `products` ที่เก็บข้อมูลสินค้า การสร้างตารางนี้จะทำให้ PostgreSQL จัดสรรพื้นที่ในรูปแบบ Heap เพื่อเก็บข้อมูลของแต่ละแถว (Tuple) โดยที่แต่ละ Tuple จะถูกจัดเก็บในตำแหน่งที่แตกต่างกันไปในพื้นที่จัดเก็บของตารางนั้น

SQL

-- 1. สร้างตารางสินค้า (ข้อมูลจะถูกจัดเก็บใน Heap) 
CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price NUMERIC(10, 2)
);

-- 2. ใส่ข้อมูล (Tuple) เข้าไปใน Heap 
INSERT INTO products (name, price) VALUES ('Laptop', 25000.00);
INSERT INTO products (name, price) VALUES ('Mouse', 550.00);

-- 3. การ Query จะดึงข้อมูลจาก Heap 
SELECT * FROM products WHERE name = 'Laptop';

⚙️ ข้อควรทราบสำหรับ System Architect

การเข้าใจ Heap Memory ไม่ได้จบแค่การรู้ว่าข้อมูลอยู่ตรงไหน แต่รวมถึงการรู้ว่าเมื่อไหร่ที่มันมีปัญหา:

  • Vacuuming: เนื่องจากข้อมูลใน Heap ถูกอัปเดตบ่อยครั้ง ทำให้เกิด Dead Tuples (ข้อมูลเก่าที่ถูกแทนที่) ซึ่งไม่ได้ถูกลบออกไปทันที การรันคำสั่ง VACUUM จึงมีความสำคัญอย่างยิ่งในการกู้คืนพื้นที่ที่ไม่ได้ใช้ใน Heap เพื่อให้ระบบมีประสิทธิภาพสูงสุด
  • Index Overhead: การใช้ Index (เช่น B-Tree) เป็นการสร้างโครงสร้างข้อมูลที่แยกออกมาต่างหากจาก Heap แต่ Index จะเก็บเพียงแค่ค่าที่ใช้ในการค้นหา (Key) และตำแหน่ง (Pointer) ที่ชี้กลับไปยัง Tuple ที่แท้จริงใน Heap

✅ บทสรุป: การจัดการข้อมูลอย่างมีประสิทธิภาพ

โดยสรุปแล้ว Heap Memory ใน PostgreSQL คือกลไกการจัดเก็บข้อมูลหลักของตารางที่ให้ความยืดหยุ่นสูงในการจัดเก็บ Tuple ที่มีขนาดไม่คงที่ การที่นักพัฒนาและ System Architect เข้าใจความแตกต่างระหว่างการจัดเก็บข้อมูลใน Heap กับโครงสร้างอื่น ๆ เช่น Index จะช่วยให้สามารถออกแบบ Schema และปรับจูนคำสั่ง VACUUM ได้อย่างถูกต้อง ซึ่งเป็นกุญแจสำคัญในการรักษาประสิทธิภาพและความเสถียรของระบบฐานข้อมูลในระยะยาวครับ

Exit mobile version