คุณจะเลือกเอ็นจินฐานข้อมูล MySQL ได้อย่างไร


16

โดยเฉพาะอย่างยิ่งคุณจะเลือกระหว่าง MyISAM และ InnoDB อย่างไรเมื่อไม่มีคุณสมบัติที่จำเป็นขาดหายไป (เช่นคุณไม่ต้องการคีย์ต่างประเทศ)

มันลงมาเพื่อลองทั้งสองอย่างและวัดได้หรือไม่? หรือมีกฎง่ายๆเกี่ยวกับจำนวนและความถี่ของการอ่านเปรียบเทียบกับการเขียนและมาตรการอื่น ๆ เช่นนั้น? ขนาดของตารางมีผลกับตัวเลือกทั่วไปหรือไม่?

คำตอบ:


6

คำตอบคือคุณควรวัดโดยเฉพาะอย่างยิ่งกับข้อมูลของคุณเองและภาระงานถ้าเป็นไปได้

เนื่องจากรูปแบบการเข้าถึงข้อมูลอาจแตกต่างกันอย่างมากจากแอพไปยังแอพจึงยากที่จะพูดและในทุกโอกาสที่เป็นไปไม่ได้ที่จะกำหนดเอ็นจิ้นการจัดเก็บ "ดีที่สุด" สำหรับเวิร์กโหลดทั้งหมด

อย่างไรก็ตามมีการพัฒนาที่ดีในพื้นที่ MySQL ที่ได้เข้าร่วม MySQLConf / Percona Performance Conf เมื่อสัปดาห์ที่แล้ว

เอ็นจินการเก็บข้อมูลสำรองบางส่วน:

  1. XtraDB (ทางแยกของ InnoDB)
  2. ปลั๊กอิน InnoDB
  3. PBXT
  4. TokuDB

นอกจากนี้ Percona, Google และอื่น ๆ ได้มีส่วนร่วมกับโปรแกรมแก้ไขที่ช่วยอย่างมากกับประสิทธิภาพของ InnoDB ส่วนตัวแล้วฉันเรียกใช้งานบิลด์ OurDelta มันทำงานได้ดีสำหรับฉันและฉันขอแนะนำให้ตรวจสอบ OurDelta และ Percona


หากคุณสนใจในการวัดประสิทธิภาพลอง sysbench หรือ iibench
Jauder โฮ

เครื่องมือเก็บข้อมูลสำรองอื่น ๆ มีความเสถียรเพียงพอหรือไม่ที่เหมาะสำหรับสถานที่ผลิต?
Tony Meyer

Don MacAskill กำลังมองหาการวาง XtraDB ในการผลิต YMMV
Jauder Ho

ประสิทธิภาพไม่ได้เป็นข้อกำหนดเพียงอย่างเดียว - พิจารณาประเด็นด้านการดำเนินงานด้วย (ในความเป็นจริงพวกเขามักจะมีความสำคัญมากกว่าในประสบการณ์ของฉัน)
MarkR

เห็นได้ชัดว่าการแสดงไม่ได้เป็นข้อกำหนดเพียงอย่างเดียว แต่ฉันเชื่อว่าคำขอดั้งเดิมได้ขอเพิ่มเติมเกี่ยวกับความสมบูรณ์แบบ ข้อควรพิจารณาอื่น ๆ เช่นการปฏิบัติงาน (ตามที่คุณชี้ให้เห็น) และคุณลักษณะทั้งหมดจะมีส่วนร่วมในกระบวนการคัดเลือก
Jauder Ho

5

หากเป็นเพียงระบบร้านค้า / รายงานที่เรียบง่ายฉันใช้ MyISAM เพื่อประสิทธิภาพที่แท้จริง

ฉันจะใช้ InnoDB ถ้าฉันกังวลเกี่ยวกับการเข้าถึงพร้อมกันหลายครั้งพร้อมการเขียนจำนวนมากเพื่อใช้ประโยชน์จากการล็อกระดับแถว


1
สำหรับเวิร์กโหลดใด ๆ ที่ผสมอ่านและเขียน InnoDB เป็นเพียงตัวเลือกเดียว (ที่กำลังจัดส่ง)
Dave Cheney

4

มีเกณฑ์มาตรฐานจำนวนมากสำหรับเครื่องมือฐานข้อมูล MySQL ที่แตกต่างกัน มีหนึ่งที่ดีเมื่อเทียบ MyISAM, InnoDB และเหยี่ยวบนเป็นบล็อก Percona MySQL ผลการดำเนินงานให้ดูที่นี่

อีกสิ่งที่ควรพิจารณาระหว่างเครื่องยนต์สองตัวที่กล่าวถึงข้างต้น (MyISAM และ InnoDB) คือวิธีการล็อค MyISAM ทำการล็อคตารางขณะที่ InnoDB ทำการล็อกแถว มีหลายสิ่งที่ต้องพิจารณาไม่ใช่เพียงแค่ตัวเลขประสิทธิภาพที่จริงจัง


4

มีคุณสมบัติที่คุณจะพบว่ามีประโยชน์มากสำหรับเหตุผลด้านการดำเนินงานแม้ว่าแอปพลิเคชันของคุณจะไม่ต้องการมันอย่างแน่นอน:

  • InnoDB มี MVCC ซึ่งหมายความว่าคุณสามารถทำการสำรองข้อมูลที่ไม่บล็อกได้
  • InnoDB มีการกู้คืนอัตโนมัติซึ่งหมายถึงไม่มีการดำเนินการซ่อมตารางที่มีความยาวหลังจากปิดเครื่องไม่สะอาด
  • ด้วย InnoDB ผู้อ่านจะไม่บล็อกนักเขียนและในทางกลับกันความหมาย (โดยทั่วไปจะพูด) เห็นพ้องด้วยกันมากกว่า (ไม่จำเป็นต้องหมายถึงประสิทธิภาพที่ดีขึ้นในกรณีทั่วไป)
  • InnoDB จัดกลุ่มแถวบนคีย์หลักซึ่งอาจหมายถึงการปฏิบัติการ IO ที่น้อยลงสำหรับการดำเนินการอ่านหากเลือกคีย์หลักได้ดีพอ

ดังนั้นแม้จะมีข้อ จำกัด ของคีย์ต่างประเทศคุณอาจต้องการใช้ InnoDB อยู่ดี

แน่นอนว่านี่คือ ServerFault ไม่ใช่ Stack Overflow ดังนั้นคำตอบที่ถูกต้องคือ:

  • คุณต้องใช้เครื่องมือที่นักพัฒนาแอปพลิเคชันเลือกไว้เสมอ
  • หากพวกเขาไม่ได้เลือกเอ็นจิ้นเฉพาะพวกเขาไม่จริงจังกับการใช้ MySQL และอาจไม่รู้วิธีใช้อย่างถูกต้อง
  • คุณไม่สามารถเปลี่ยนเป็นเอ็นจิ้นที่แตกต่างกันไปเป็นแอพพลิเคชั่นที่ได้ทำการทดสอบแล้วมันอาจจะแนะนำบั๊ก

2
คุณคิดว่าเอ็นจิ้นฐานข้อมูลเป็นการตัดสินใจของผู้พัฒนาไม่ใช่ผู้ดูแลระบบหรือไม่ ในฐานะนักพัฒนาซอฟต์แวร์ฉันต้องการพูดว่า "ฉันมีข้อมูลนี้แล้วฉันจะทำสิ่งนี้ด้วย" และปล่อยให้การเพิ่มประสิทธิภาพ (และสำรองและ ... ) ของฐานข้อมูลแก่ผู้ดูแลระบบ
Tony Meyer

1
ใช่นักพัฒนาจะต้องสามารถพัฒนาและทดสอบแอพของพวกเขากับเครื่องมือเฉพาะ พวกมันทำงานแตกต่างกันอย่างมากทั้งในด้านการใช้งานและประสิทธิภาพ
MarkR

2

ผู้ให้บริการโฮสติ้งของฉันแนะนำให้เรากำจัด MyISAM อย่างสมบูรณ์และเปลี่ยนเป็น InnoDB เว้นแต่จะเป็นไปไม่ได้

ในกรณีของเราเรามีความเสียหายของข้อมูลอย่างรุนแรงซึ่งเริ่มแสดงจากสองสามครั้งต่อวันไม่กี่ครั้งต่อวันต้องมีตารางซ่อมและคำสั่งที่เกี่ยวข้องซึ่งใช้เวลานานบนโต๊ะขนาดใหญ่

เมื่อเราแปลง (หรือถูกแปลง) เป็น InnoDB ปัญหาก็หายไปทันที ข้อเสีย / คำเตือนที่เรามี:

  • ไม่สามารถแปลงตารางด้วยดัชนี FULLTEXT (ปัญหานี้หายไปตามกาลเวลาด้วยตัวเองมันถูกแทนที่ด้วยโซลูชันที่ใช้ Solr / Lucene ซึ่งมีคุณภาพดีกว่ามากอยู่แล้ว)
  • ตารางขนาดใหญ่ที่มีแถวนับล้านแถวซึ่งมักจะต้องใช้ COUNT (*) นั้นช้ามากเราจึงไม่สามารถเปลี่ยนได้

แต่หมายเหตุ: ทั้งหมดนี้มีเฉพาะกับสภาพแวดล้อมของเรา ฯลฯ ดังนั้นโดยทั่วไปอาจใช้ไม่ได้


เลือกนับเท่านั้น ( ) จากตารางเร็วขึ้นใน MyISAM เลือก count ( ) จากตารางที่ column = value มีประสิทธิภาพใกล้เคียงกันทั้งใน MyISAM และ InnoDB mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables
sumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.