Beberapa tabel Magento bukan InnoDB, apakah aman untuk mengonversi semua tabel ke InnoDB?

16

Saya menggunakan AWS RDS Read Replica. Itu terus-menerus memiliki masalah dengan tabel mesin Memori Magento. Untuk membuat cadangan dan membaca replika, RDS menyukai InnoDB. Bisakah saya mengubah semua tabel dengan aman ke InnoDB?

Selain itu saya mendapatkan peringatan berikut dari AWS:

DB Instance magento-monin-prod-db berisi tabel MyISAM yang belum dimigrasi ke InnoDB. Tabel ini dapat memengaruhi kemampuan Anda untuk melakukan pemulihan point-in-time. Pertimbangkan untuk mengonversi tabel ini ke InnoDB. Silakan merujuk ke http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.html#MySQL.CommonDBATasks.Tables

Jawaban yang masuk akal

Masih tertarik dengan umpan balik. Saya akan menambahkan ini sebagai jawaban jika saya tidak menemukan masalah dalam 24 jam ke depan. Langkah-langkah yang saya ambil di bawah ini tampaknya aman, sejauh ini. Kekhawatiran terbesar saya adalah tabel Memory Engine Magento (tabel berakhiran in_tmp) dan dampaknya pada pengindeksan.

Inilah yang saya lakukan:

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

    • Bagi saya ini mengembalikan sebagian besar tabel indeks sementara dan tabel modul magento, jadi tidak banyak tabel inti penting yang perlu dikhawatirkan dan beberapa tabel yang cukup sehingga saya dapat dengan mudah menjalankan tabel alter lain jika ada hal-hal yang menyentuh kipas angin.
  2. Untuk setiap tabel yang dikembalikan, saya menjalankan: Alter table {table-name} ENGINE=InnoDB;

Saya akan gugup untuk mencoba ini jika tidak ada meja Anda yang InnoDB. Tetapi, seperti yang saya katakan sebelumnya, hanya ada beberapa tabel inti pada instance saya yang perlu dimodifikasi.

TylersSN
sumber
Apakah Anda sudah menjalankan ini dalam produksi lama? Jika demikian, bagaimana kabarnya - apakah itu menyebabkan Anda memiliki masalah? Berpikir terutama tentang tabel indeks * _tmp yang saat ini menjadi mesin MEMORY.
Michael Parkin
1
Saya belum melihat sesuatu yang tidak biasa.
TylersSN
Hebat, terima kasih sudah mengkonfirmasi - kami akan mencobanya dan melaporkannya juga.
Michael Parkin
@michael parkin perlu diingat bahwa kami menggunakan pencarian Solr. Lihat jawaban lain yang berbicara tentang bagaimana ini berpotensi memengaruhi pencarian.
TylersSN
1
Kami telah menjalankan ini di sebagian besar lokasi produksi kami (MariaDB 10.0), semua tabel (termasuk Memori) berjalan sebagai InnoDB - sangat bagus
Michael Parkin

Jawaban:

11

Tidak masalah untuk mengubah tipe data ke InnoDB, dengan asumsi salah satu dari yang berikut ini benar:

  1. Anda menggunakan MySQL 5.6.4+ di mana mesin penyimpanan InnoDB mendukung pencarian teks lengkap
  2. Anda tidak menggunakan fungsionalitas Pencarian Magento default yang bergantung pada kemampuan pencarian fulltext MyISAM yang mendasarinya. Fungsionalitas itu sulit untuk memulai dan set fitur yang disediakan di default Magento Search menyisakan banyak yang diinginkan jadi saya sarankan menggunakan Lucene atau Sphinx atau pencarian terbaik yang disediakan oleh Algolia .

Secara pribadi saya akan merekomendasikan melakukan ini dengan Magento DB Repair Tool untuk meminimalkan risiko dan juga memeriksa drift konfigurasi DB lain atau masalah. InnoDB adalah mesin yang ideal, meskipun memiliki keterbatasan teks lengkap.

Bryan 'BJ' Hoffpauir Jr.
sumber
1
Kami menggunakan pencarian Solar. Jadi, kita harus jelas dalam pencarian.
TylersSN
Saya tidak akan menganggap InnoDB mesin yang ideal sama sekali. Ini sangat lambat dibandingkan dengan MyISAM jika Anda memiliki banyak permintaan pencarian. Saya sering mendengar bahwa InnoDB lebih cepat melakukan pembaruan dan sebagian besar pertanyaan adalah pembaruan sehingga lebih cepat. Saya melihat kebalikannya. Untuk setiap situs yang saya miliki, saya memiliki lebih banyak permintaan pencarian yang memperbarui / menambah permintaan. Saya mencoba mengalihkan semua tabel saya ke InnoDB dan waktu buka halaman dari dasarnya tidak ada penundaan (mungkin 0,1 detik) menjadi 10 detik! Saya mengonversikan semuanya kembali ke MyISAM karena ini adalah mesin yang ideal untuk kecepatan (dan mendukung pencarian teks lengkap).
Tim Eckel
Tim, saya "JENIS" dari setuju, terutama karena saya telah melihat waktu & lagi bahwa @ ben-lessani-sonassi hanya terbukti benar & MySQL jarang menjadi hambatan nyata pada keseluruhan kinerja dengan # sistem OTHER yang perlu optimisasi untuk respons sub-800ms bahkan saat memuat TETAP InnoDB adalah kunci b / c Mage Core menulis ke DB ~ 10X untuk mencatat setiap tindakan pengguna "tampilan" plus Solr yang terbaik untuk kinerja & kualifikasi penelusuran :)
Bryan 'BJ' Hoffpauir Jr
1
Jadi, bagaimana mengonversi apa yang seharusnya menjadi InnoDB menangani semua hubungan kunci asing dan seberapa lengkap penghapusan yang bergantung pada penghapusan pada kaskade dari hubungan fkey? Dengan kata lain, bagaimana Anda menangani sampah yang akan ditinggalkan dengan tidak memiliki hubungan di tempat?
Fiasco Labs
@FiascoLabs Sudah lama saya tidak melihat utas komentar ini, tetapi fokus dari Q / A adalah mengonversi FROM MyISAM KE InnoDB. Saya kira yang memiliki fitur Relasional yang mungkin Anda sebutkan adalah InnoDB. MyISAM tidak mendukung FK atau Transaksi pada MySQL 5.7 meskipun InnoDB melakukannya meskipun sedikit menyimpang dari standar SQL
Bryan 'BJ' Hoffpauir Jr.
2

Afaik Anda tidak harus mengkonversi semua tabel ke InnoDB.

catalogsearch_fulltext harus tetap MyISAM, karena InnoDB tidak memiliki dukungan pencarian teks lengkap, setidaknya tidak sampai MySQL 5.6 (iirc).

Namun, untuk semua tabel lainnya, itu harus aman.

simonthesorcerer
sumber
2
Ini didukung di MySQL 5.6.4+
Bryan 'BJ' Hoffpauir Jr.
2

Saya baru saja mengubah mesin default MySQL ke InnoDB dan sebagian besar tabel Magento saya secara ajaib mengubah diri mereka menjadi InnoDB (beberapa masih MyISAM dan beberapa Memori).

Hanya berpikir saya akan membagikan ini ...

Roy Toledo
sumber