แม้ MySQL จะเป็นระบบฐานข้อมูลที่ได้รับความนิยมอย่างสูง แต่บั๊กบางอย่างก็ใช้เวลาแก้ไขนานอย่างไม่น่าเชื่อ ในเวอร์ชั่น 8.0.3 (สถานะเป็น release candidate 1 ของรุ่น 8.0) ทาง MySQL ก็ได้แก้บั๊กหมายเลข 199 ที่เปิดมาตั้งแต่วันที่ 27 มีนาคม 2003 หรือประมาณ 14 ปีกับอีก 6 เดือนมาแล้ว
บั๊กหมายเลข 199 เป็นปัญหาของระบบ auto_increment เมื่อใช้กับตารางที่เป็น innodb โดยหมายเลขสูงสุดที่เคยถูกใช้งานจะไม่ถูกจำไว้ หากมีการรีสตาร์ตตัวเซิร์ฟเวอร์ใหม่ ทำให้มีปัญหาการใช้หมายเลขซ้ำในกรณีที่มีการลบ record ล่าสุดออกไปแล้วรีสตาร์ต
ผู้รายงานบั๊กนี้คือ Peter Zaitsev โดยตัวบั๊กกระทบตั้งแต่ MySQL 4.0 เป็นต้นมา ตัว Zaitsev เองก็ยังรายงานบั๊กให้กับ MySQL อยู่เรื่อยๆ จนถึงบั๊กล่าสุดในปี 2010 และทางออราเคิลออกมาตอบในบั๊กว่าจะแก้ไขในเวอร์ชั่น 8.0 ตั้งแต่ปีที่แล้ว
ตอนนี้ MySQL 8.0 ยังอยู่ในสถานะ pre-general available โดยจะมีความสามารถใหม่ๆ มากมาย เช่นรองรับ JSON ในตัว, รองรับ Unicode 9.0 เป็นต้น
Comments
Maria DB ก็โดนด้วยป่าวครับ
Ooh
+1
แก้แล้วเมื่อวันที่ 17 Feb 2017 ครับ https://mariadb.com/kb/en/library/mariadb-1024-release-notes/
ปล่อยมานานแบบนี้จะเรียกว่า แก้ไม่ หรือ ไม่แก้ดี
โห 14 ปีเลยทีเดียว ตัวเลขทั้งหมายเลขบั๊ก ทั้งเวลา น่าเอาไปซื้อล็อตเตอรี่จริงๆ ห้าห้า
..: เรื่อยไป
ลืมไปเลยว่าเคยมีบัค
14 อีกครั้ง
นึกว่ามันเป็นข้อจำกัดของ InnoDB มาตลอด Orz
Jusci - Google Plus - Twitter
เพราะแก้ช้ามากกกกก (เหมือนไม่สนใจจะแก้) เลยกลายเป็นข้อจำกัด ในขณะที่ engine อื่นกลับไม่มีปัญหานี้ครับ
เคยงานเข้าเพราะบัคนี้มาแล้ว ต้องมาเขียน script re-index กันใหม่ วุนวายเลย
สำหรับใครที่อยากรู้ว่ามันเกิดขึ้นได้ยังไง พฤติกรรมมันเป็นแบบนี้ครับ
1. Innodb รันครั้งแรกจะไปดูว่า แต่ละ table มี record ล่าสุด อะไร แล้วจับ id+1 เป็น auto_increment
2. ถ้าข้อแรกไม่เจอ . ให้เซต auto-increment = 1
3. นำค่าที่ได้เก็บลง Ram
ข้อ 3) นี้แหละปัญหา เพราะแทนที่จะเก็บลง HDD เหมือนระบบอื่น