ตารางใดที่ควรหรือสามารถย้ายไปยัง InnoDB และควรจะอยู่ MyISAM


10

ตามชื่อเรื่อง: มีรายการผู้สมัครด่วนสำหรับตารางที่จะย้ายไปยัง InnoDB หรือไม่? และสิ่งที่ควรเป็นของ MyISAM

ข้อมูลเพิ่มเติมบางส่วน

  • ไซต์มีโหลดการอ่านค่อนข้างหนัก แต่จะแทรกประมาณ 10 โหนดต่อชั่วโมงด้วยแท็กและเช่น
  • เราใช้ประโยชน์อย่างมากของ CCK (ตารางมาตรฐานจำนวนมากในรูปแบบของcontent_field%)
  • นอกจากนี้เรายังใช้Viewsสำหรับบล็อกและหน้าทั้งหมดของเรา แต่ส่วนมากนั้นเป็นตัวเลือกสำหรับการแทนที่ด้วยโมดูลที่กำหนดเอง (เพื่อลดการสืบค้นฐานข้อมูลและความหนักเบาของการค้นหาเหล่านั้น)
  • ผู้ใช้ทั้งหมดไม่ระบุชื่อ ยกเว้นผู้แก้ไขและผู้ดูแลเว็บที่ลงชื่อเข้าใช้เพียงไม่กี่คน

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

คำตอบ:


8

คุณควรแปลงข้อมูลทั้งหมดเป็น InnoDB เพื่อป้องกันปัญหาการล็อคตาราง อย่างไรก็ตามนี่เป็นสิ่งที่ควรพิจารณา:

การจัดทำดัชนี FULLTEXT

ในปัจจุบันมีเพียง MyISAM เท่านั้นที่รองรับการจัดทำดัชนี FULLTEXT FULLTEXT การจัดทำดัชนีสำหรับ InnoDB ขณะนี้อยู่ในผลงานสำหรับ MySQL 5.6 แต่ไม่ได้ผลิตพร้อม หากคุณมีตาราง Drupal ใด ๆ ที่มีดัชนี FULLTEXT ตารางเหล่านั้นจะไม่สามารถแปลงเป็น InnoDB ได้ในขณะนี้

อัปเดตเกี่ยวกับการจัดทำดัชนี FULLTEXT

ขณะนี้ MySQL 5.6 เป็น GA (ใช้เพื่อการผลิต) โปรดลองทำดัชนี FULLTEXT ใน InnoDB

ในการค้นหาตารางเหล่านั้นที่มีFULLTEXTดัชนีให้เรียกใช้คิวรีนี้:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

หากไม่มีแถวกลับมาให้แปลงตาราง InnoDB ทั้งหมดเป็นเนื้อหาในใจของคุณ ผมเขียนโพสต์ก่อนหน้านี้เกี่ยวกับวิธีการแปลงตาราง MyISAM ทั้งหมดเพื่อ InnoDB ใช้ MySQL

การจำลองแบบ MySQL

หากคุณมีสภาพแวดล้อมแบบอ่านอย่างหนักการอ่านสามารถไปได้เร็วขึ้นใน MyISAM ถ้าคุณทำสิ่งต่อไปนี้:

  • ตั้งค่าการจำลองแบบโท / Slave
  • สร้าง Slaves การอ่านอย่างน้อยหนึ่งอันใต้ Master
  • เพิ่ม--skip-innodb/etc/my.cnf ใน Slaves ทั้งหมด (แปลงตารางเป็น MyISAM เมื่อโหลดข้อมูลลงใน Slave)
  • เปลี่ยนรูปแบบแถวของตาราง MyISAM ทั้งหมดในทุก Slave เป็น FIXED โดยคำสั่งนี้: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • ฉันโพสต์บางอย่างเกี่ยวกับเรื่องนี้ใน DBA StackExchange
  • หนังสือออกแบบฐานข้อมูล MySQL และปรับแต่งแนะนำให้ใช้ROW_FORMAT=FIXEDในหน้า 72,73 สิ่งนี้จะแปลงเขตข้อมูล VARCHAR ทั้งหมดเป็น CHAR มันจะทำให้ตาราง MyISAM ใหญ่ขึ้น แต่ทำการเลือก SELECT กับมันจะเร็วขึ้นมาก ฉันสามารถยืนยันถึงสิ่งนี้เป็นการส่วนตัว ฉันเคยมีตารางที่ 1.9GB ALTER TABLE tblname ROW_FORMAT=FIXEDผมเปลี่ยนรูปแบบด้วย ตารางสิ้นสุดลง 3.7GB ความเร็วของ SELECT ต่อมันเร็วขึ้น 20-25% โดยไม่ต้องปรับปรุงหรือเปลี่ยนแปลงอะไรเลย

อาการปวดหัวเพียงอย่างเดียวคือการทำให้แอปพลิเคชันของคุณทราบว่าอ่านทาสแยกกัน

บทส่งท้าย

หากคุณกำลังมองหาประโยชน์อื่น ๆ ที่เอ็นจิ้นการจัดเก็บแต่ละตัวมีให้ตรวจสอบ DBA StackExchange:


4

เนื่องจากเว็บไซต์ของคุณอ่านยากเราจะแปลงตารางทั้งหมดเป็น InnoDB จากนั้นคุณจะสามารถเพิ่มประสิทธิภาพการอ่านได้โดยการปรับขนาดบัฟเฟอร์พูล InnoDB และแคชแบบสอบถามอย่างเหมาะสม ด้วยวิธีนี้เราจะได้รับข้อความค้นหาหลายพันข้อความต่อวินาทีบนเซิร์ฟเวอร์ฐานข้อมูลเฉพาะในโครงสร้างพื้นฐานการโฮสต์ของ Drupal

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.