มารู้จัก toast ใน postgres กัน ตัวทำ db บวม

Aphichan Chaiyutthasart
Witsawa Corporation
1 min readAug 30, 2023

ขอเล่าที่มาที่ไปก่อนนะครับ

มีอยู่ project หนึ่ง เผลอเก็บรูปเป็น base64 ไว้ใน column หนึ่งของ table จน table ใหญ่ผิดปกติ ทีมงานที่เกี่ยวข้องก็ตรวจสอบจนพบว่า total size ของ table นั้นมันใหญ่

ทีนี้ข้อมูลตรงนั้น เราสามารถลบของเก่ามากๆ ได้ ก็เลยไล่ลบข้อมูลเก่าออก แต่เจอประเด็น คือ ทำไม total size ถึงไม่ลดกันนะ

ก็เลยมาดูว่า total size ประกอบด้วย table size + index size + toast size แล้วก็พบว่า toast size ใหญ่มาก ก็มาดูที่ข้อมูลก็พบว่า เกิดจาก ขนาดข้อมูลของ column ดังกล่าวมันใหญ่เกินไป มันจึงนำข้อมูลไปเก็บไว้ที่ toast

TOAST = The Oversized-Attribute Storage Technique คือเป็นที่เก็บข้อมูลที่ใหญ่เกินไป (เหมือนจะ set ได้ แต่ default น่าจะ 2kB)

ทีนี้ ถ้าจะ clean ข้อมูล toast ที่ไม่ใช้ก็ คือ ต้องใช้ คำสั่ง VACUUM FULL ถึงจะทำให้ toast size ลดลงได้ (ข้อควรคือ คำสั่งนี้มันจะ lock db นะ หาโอกาสรันดีๆ)

ข้างบนที่กล่าวมานี้ คือ วิธีแก้ปัญหาเฉพาะหน้าก่อน

ทางที่ดีกว่า คือ ย้าย base64 ไปเก็บเป็นไฟล์แทนดีกว่า เพื่อลดขนาดข้อมูลใน column นั้นๆ

เรื่องนี้ทำให้รู้ว่า ควรตระหนัก ตอนเก็บข้อมูล เก็บเท่าที่จำเป็นพอ

ความผิดพลาด ทำให้เกิดการเรียนรู้

อ้างอิง

--

--