เขาพูดถึงประเด็นว่าทำไมเขาถึง switch จาก MySQL -> PostgreSQL
แรกเริ่มเดิมทีเขาใช้ MySQL 's MyISAM table แต่ต่อมาก็เปลี่ยนไปใช้
mysql 's InnoDB table แทน โดยเขาพบปัญหาจาก
table locking behavior in MyISAM
เนื่องจากลักษณะงานของเขามี write ครึ่งหนึ่งของ read
(read 4 ล้าน quries/day, write 2 ล้าน queries/day)
ผลก็คือทำให้ scalable ของเขาต่ำมาก (< 10 users)
ผลลัพท์จากการใช้ InnoDB เขาบอกว่า
พบปัญหา slow performance
จากการ load Data (ไม่ใช่เรื่อง query)
ก็เลยตัดสินใจเปลี่ยนอีกที
คร่าวนี้ย้ายไป PostgresSQL แทน
เหตุผลที่เป็นแรงจูงใจในการเปลี่ยนคราวนี้ ก็มี
- Database Size
เมื่อตอนเปลี่ยนจาก MyISAM -> InnoDB database
ที่เคยมีขนาด 1 GB ก็กลายเป็น 10+GB
ปัจจุบัน ณ ขณะที่เปลี่ยน ขนาดได้กลายเป็น 34 GB
หลังจากย้ายลง Postgres แล้ว ขนาดเหลือเพียง 9 GB - Load time
การ load data ลง database
เดิม MySQL ใช้เวลา 1 วัน ในการ load
เมื่อเปลี่ยนมาใช้ PostgreSQL ก็เหลือแค่ 4 ชั่วโมง
นอกจากนี้ยังพบว่า Postgres ใช้ memory
แค่ 1/3 ของ mysql
ที่น่าสนใจก็คือ comment ที่มีคนมา post
เช่น
- InnoDB ใน MySQL 5 มี feature "compact" row format
ที่ช่วยลดขนาด table ได้ - Postgres ไม่สามารถ set ให้ใช้ share buffer
ได้เต็มที่เหมือน MySQL แต่ Postgers สามารถใช้ประโยชน์จาก
OS cache ได้, และมีค่า effective_cache_size ที่ใช้ set
เพื่อให้ optimizer รับรู้ - Feedlounge ใช้ GUID เป็น primarykey
คนของ MySQL ก็เลยบอกGUIDs tend not to do well for index storage efficiency, since InnoDB stores the uncompressed primary key in all secondary index records.
ผลก็คือเขาต้องใช้ IO เยอะขึ้นไปอีก (จากการ load index) UUID is really poor choice for primary key for Innodb.
The data is going to be clustered by it… and it is random which means you will insert in radom spots in giant BTREE (as it holds rows). Furthermore inserts in the middle will frequently result in page spits which causes IO and fragmentation.
No comments:
Post a Comment