ตาราง Magento บางตัวไม่ใช่ InnoDB ปลอดภัยที่จะแปลงตารางทั้งหมดเป็น InnoDB หรือไม่


16

ฉันใช้แบบจำลองการอ่าน AWS RDS มันมีปัญหากับตารางเอนจินของ Magento อย่างต่อเนื่อง สำหรับการสำรองข้อมูลและการอ่าน RDS แบบจำลองชอบ InnoDB ฉันสามารถเปลี่ยนตารางทั้งหมดเป็น InnoDB ได้อย่างปลอดภัยหรือไม่

นอกจากนี้ฉันยังได้รับคำเตือนต่อไปนี้จาก AWS:

DB Instance magento-monin-prod-db มีตาราง MyISAM ที่ไม่ได้ย้ายไปยัง InnoDB ตารางเหล่านี้สามารถส่งผลกระทบต่อความสามารถในการกู้คืนข้อมูล ณ เวลาที่กำหนด พิจารณาการแปลงตารางเหล่านี้เป็น InnoDB โปรดดูที่http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

คำตอบที่น่าเชื่อถือ

ยังคงสนใจในข้อเสนอแนะ ฉันจะเพิ่มนี่เป็นคำตอบหากฉันไม่พบปัญหาใด ๆ ภายใน 24 ชั่วโมงข้างหน้า ขั้นตอนที่ฉันทำด้านล่างดูเหมือนจะปลอดภัยจนถึงตอนนี้ ข้อกังวลที่ใหญ่ที่สุดของฉันคือตาราง Memory Engine ของ Magento (ตารางที่ลงท้ายด้วย in_tmp) และผลกระทบที่อาจเกิดขึ้นกับการจัดทำดัชนี

นี่คือสิ่งที่ฉันทำ:

  1. SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE (ENGINE = 'Memory' OR ENGINE='MyIsam') AND TABLE_SCHEMA='magento_db'

    • สำหรับฉันนี่เป็นตารางดัชนีชั่วคราวและโมดูลโมดูลวีโอไอพีที่ส่งคืนส่วนใหญ่ดังนั้นจึงไม่มีตารางหลักที่สำคัญที่ต้องคำนึงถึงและมีตารางไม่กี่ตารางที่ฉันสามารถดำเนินการแก้ไขตารางอื่นได้อย่างง่ายดายหากสิ่งที่แฟน ๆ ชื่นชอบ
  2. สำหรับแต่ละตารางที่ส่งคืนฉันดำเนินการ: Alter table {table-name} ENGINE=InnoDB;

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


คุณใช้เวลาในการผลิตนานไหม? ถ้าเป็นเช่นนั้นจะเป็นอย่างไร - มันทำให้คุณมีปัญหาใด ๆ การคิดเบื้องต้นเกี่ยวกับตารางดัชนี * _tmp ซึ่งปัจจุบันเป็นกลไกหน่วยความจำ
Michael Parkin

1
ฉันไม่ได้สังเกตเห็นอะไรผิดปกติ
TylersSN

เยี่ยมมากขอบคุณสำหรับการยืนยันเราจะให้เวลานี้และรายงานกลับด้วย
Michael Parkin

@michael parkin โปรดทราบว่าเรากำลังใช้การค้นหา Solr ดูคำตอบอื่น ๆ ที่พูดถึงสิ่งที่อาจส่งผลต่อการค้นหา
TylersSN

1
เราได้ดำเนินการในส่วนของไซต์การผลิตของเรา (MariaDB 10.0) ตารางทั้งหมด (รวมถึงหน่วยความจำ) ทำงานเป็น InnoDB - ใช้งานได้ดี
Michael Parkin

คำตอบ:


11

คุณสามารถเปลี่ยนประเภทข้อมูลเป็น InnoDB โดยถือว่าหนึ่งในสิ่งต่อไปนี้เป็นจริง:

  1. คุณใช้ MySQL 5.6.4+ ซึ่งเครื่องมือจัดเก็บข้อมูลInnoDB รองรับการค้นหาแบบเต็ม
  2. คุณไม่ได้ใช้ฟังก์ชันการค้นหา Magento ที่เป็นค่าเริ่มต้นซึ่งขึ้นอยู่กับความสามารถในการค้นหาแบบเต็มของ MyISAM พื้นฐาน ฟังก์ชันการทำงานที่จะลำบากจะเริ่มต้นด้วยและชุดคุณลักษณะที่ให้ไว้ในการเริ่มต้นวีโอไอพีค้นหาใบมากเป็นที่ต้องการดังนั้นผมจึงขอแนะนำให้ใช้Lucene หรือสฟิงซ์หรือที่ดีที่สุดยังAlgoliaเจ้าภาพค้นหา

โดยส่วนตัวฉันขอแนะนำให้ทำเช่นนี้กับเครื่องมือซ่อมแซม Magento DBเพื่อลดความเสี่ยงและตรวจสอบดริฟท์ฐานข้อมูลหรือปัญหาอื่น ๆ InnoDB เป็นเครื่องมือในอุดมคติมันมีข้อ จำกัด แบบเต็มแม้ว่าจะมี


1
เรากำลังใช้การค้นหาพลังงานแสงอาทิตย์ ดังนั้นเราควรชัดเจนว่าเกี่ยวข้องกับการค้นหาอย่างไร
TylersSN

ฉันไม่คิดว่า InnoDB เป็นเครื่องมือในอุดมคติเลย มันช้ามากเมื่อเทียบกับ MyISAM หากคุณมีคำค้นหาจำนวนมาก ฉันมักจะได้ยินว่า InnoDB ทำการอัปเดตได้เร็วขึ้นและคิวรีส่วนใหญ่เป็นอัปเดตดังนั้นจึงเร็วขึ้น ฉันเห็นสิ่งที่ตรงกันข้ามทั้งหมด สำหรับทุกเว็บไซต์ที่ฉันมีฉันมีคำค้นหาเพิ่มเติมที่ปรับปรุง / เพิ่มคำค้นหา ฉันพยายามเปลี่ยนตารางทั้งหมดของฉันเป็น InnoDB และเวลาในการโหลดหน้าเว็บลดลงจากเดิมโดยไม่ล่าช้า (อาจเป็น 0.1 วินาที) เป็น 10 วินาที! ฉันแปลงทุกอย่างกลับเป็น MyISAM เพราะเป็นเครื่องมือที่เหมาะสำหรับความเร็ว (และรองรับการค้นหาข้อความเต็ม)
Tim Eckel

ทิมฉันยอมรับ "KIND" ส่วนใหญ่เป็นเพราะฉันได้เห็นเวลาและอีกครั้งว่า @ ben-lessani-sonassi นั้นถูกพิสูจน์แล้วว่าถูกต้อง & MySQL ไม่ค่อยเป็นเรื่องจริงในการลากโดยรวมด้วยระบบอื่น ๆต้องการการเพิ่มประสิทธิภาพสำหรับการตอบสนองย่อย 800ms แม้ในขณะโหลดแต่ InnoDB เป็นคีย์ b / c Mage Core กำลังเขียนไปยัง DB ~ 10X เพื่อบันทึกการกระทำของผู้ใช้แต่ละคน "ดู" บวกกับ Solr เหมาะที่สุดสำหรับการค้นหา & คุณภาพ :)
Bryan 'BJ' Hoffpauir จูเนียร์

1
ดังนั้นการแปลงสิ่งที่ควรจะเป็น InnoDB จะจัดการความสัมพันธ์กับกุญแจต่างประเทศทั้งหมดได้อย่างไรและการลบนั้นขึ้นอยู่กับการลบทั้งหมดจากความสัมพันธ์แบบ fkey เหล่านั้นอย่างไร กล่าวอีกนัยหนึ่งคุณจะจัดการกับแคร่ที่จะถูกทิ้งไว้โดยไม่มีความสัมพันธ์ในสถานที่ได้อย่างไร
Fiasco Labs

@FiascoLabs นานมากแล้วที่ฉันได้ตรวจสอบกระทู้ความคิดเห็นนี้ แต่จุดเน้นของ Q / A คือการแปลงจาก MyISAM เป็น InnoDB ฉันเดาว่าคนที่มีคุณสมบัติเชิงสัมพันธ์ที่คุณอาจกล่าวถึงคือ InnoDB MyISAM ไม่สนับสนุน FK ของการทำธุรกรรมมิได้เป็นของ MySQL 5.7แม้ว่าInnoDB ไม่แม้ว่ามันจะเบี่ยงเบนไปจากมาตรฐาน SQL เล็ก ๆ น้อย ๆ
ไบรอัน 'BJ' Hoffpauir จูเนียร์

2

Afaik คุณไม่ควรแปลงตารางทั้งหมดเป็น InnoDB

catalogsearch_fulltext ควรอยู่ MyISAM เนื่องจาก InnoDB ไม่มีการสนับสนุนการค้นหาแบบเต็มอย่างน้อยก็จนกว่า MySQL 5.6 (iirc)

สำหรับตารางอื่น ๆ ทั้งหมดมันควรจะปลอดภัย



2

ฉันเพิ่งเปลี่ยนเอนจิ้นเริ่มต้นของ MySQL เป็น InnoDB และตาราง Magento ของฉันส่วนใหญ่ก็เปลี่ยนเป็น InnoDB อย่างน่าอัศจรรย์

แค่คิดว่าฉันจะแบ่งปันสิ่งนี้ ...

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