Apakah praktik umum untuk mencampur tabel InnoDB dan MyISAM pada server yang sama?


21

Saya punya satu database sekitar 4,5GB yang berjalan di server dengan 8GB RAM. Sebagian besar tabel adalah MyIsam (sekitar 4.3GB), tapi saya akan segera mengonversinya menjadi InnoDB. (Ini akan menjadi proses yang lambat, berfokus pada tabel paling intensif pada awalnya).

Apakah ada yang salah dengan menjalankan server khusus di mana kedua jenis mesin penyimpanan ada?


Is there anything wrong with running a dedicated server where both types of storage engines exist? Mungkin ulangi lagi Multiple types?
John

Satu-satunya alasan saya mengatakan 'keduanya' adalah karena pertanyaan ini adalah tentang dua mesin utama yang dikonfigurasi untuk 'disetel dengan halus'. Saya mencoba untuk mengabaikan jenis mesin lain seperti MEMORY atau MERGE, yang tidak biasa bahwa afaik bukan objek dari penyetelan kinerja.
Derek Downey

Jawaban:


18

Tidak ada yang salah dengan menggunakan beberapa mesin penyimpanan pada mesin fisik yang sama, selama Anda memahami pro dan kontra masing-masing. Ada pertimbangan kinerja, batasan fitur, dan kasus penggunaan untuk semua jenis penyimpanan plugin.

Misalnya, jika Anda memiliki tabel kecil yang 90% menulis, Anda dapat memilih MyISAM. Jika data dapat dibuat ulang dengan mudah dan ini adalah meja kecil, katakanlah untuk antri, Anda mungkin memilih Memori. Jika Anda memiliki tabel yang berbunyi 90%, dan data harus ada di sana ketika Anda mencarinya, maka Anda mungkin akan memilih mesin penyimpanan yang mendukung transaksi dan atomisitas yang dapat dikonfigurasi, seperti InnoDB. Jika Anda ingin aksesibilitas melalui sistem file tanpa merusak data, Anda dapat memilih CSV.

Meskipun demikian, Anda dapat dengan aman menggunakan beberapa mesin penyimpanan dalam skema yang sama serta host fisik.

Akan saya perhatikan, bahwa buffer Anda berperan dalam seluruh kekacauan ini. Jika Anda menggunakan MyISAM dan InnoDB, Anda harus berhati-hati agar key_buffer dan innodb_buffer_pool Anda tidak bersaing. Ini akan membutuhkan perencanaan yang matang dari Anda, tetapi itulah yang kami lakukan.


4
+1 Kasus penggunaan umum lainnya adalah MyISAM untuk tabel yang membutuhkan pencarian teks lengkap dan InnoDB untuk semua tabel lainnya.
Asaf

@ Aseph: Bahkan pada saat komentar Anda, InnoDB mendukung indeks Fulltext .
BlueRaja - Danny Pflughoeft

2
^^^^ "fitur MySQL 5.6" bukan GA sampai 2013-02-05
randomx

1
@randymelder Jawaban yang bagus. Apakah Anda dapat menguraikan apa yang Anda maksud dengan "Anda harus berhati-hati agar key_buffer dan innodb_buffer_pool Anda tidak bersaing"?
Neel

1
Saya ingin terbukti salah, tetapi logikanya terlihat berlawanan dengan stackoverflow.com/a/6796566/5645769 ini di sini.
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ

7

Saya tidak bisa memberi tahu Anda apakah ini adalah praktik umum. Saya bisa katakan tentang pengalaman saya sendiri.

Saya selalu menggunakan alat terbaik untuk pekerjaan itu, jadi saya mencampur mesin sepanjang waktu. Sebagian besar proyek saya menggunakan MyISAM sebagai mesin default.

Ketika saya membutuhkan fitur khusus yang hanya tersedia di InnoDB, saya melakukannya.

Ketika sebuah tabel kebanyakan hanya baca-saja, saya memilih mesin Arsip sebelum saya bisa berkedip.

Mengetahui bahwa server mesin memiliki cukup memori, semua data temp saya disimpan di tabel Heap.

Saya melihat di masa lalu beberapa perlambatan pencampuran MyISAM dan InnoDB tapi ini bukan masalah MySQL yang spesifik. Ini masalah desain yang tidak terlihat ketika Anda hanya menggunakan satu mesin. Sebenarnya menggunakan mesin yang salah menyebabkan lebih banyak pelambatan tidak masalah apakah itu hanya MyISAM, hanya InnoDB atau gabungan keduanya. Sulit untuk menentukan formula untuk mengetahui kapan perlambatan akan terjadi. Hanya tes yang sebenarnya bisa mengatakannya kepada Anda.

Tentu saja, Anda tidak dapat mempertahankan integritas dan konsistensi pencampuran InnoDB dan MyISAM pada permintaan unik.


mesin arsip tidak mendukung pengindeksan jadi mengapa Anda menyimpannya di arsip.
user4951

0

Saya mencoba untuk menghindari pencampuran tabel MyISAM dan InnoDB dalam database yang sama, tetapi ini untuk alasan kewarasan daripada alasan praktis. Namun, saya merasa berguna untuk memiliki database dengan tabel MyISAM untuk pencarian teks lengkap sehingga saya dapat menjalankannya di situs. Menyimpannya dalam database terpisah dengan kunci asing untuk setiap entri membuatnya mudah bagi pengembang lain yang bekerja pada DB untuk melihat apa yang terjadi.


Bagaimana Anda bisa memiliki kunci asing ketika menggunakan MyISAM?
a_horse_with_no_name

Terminologi salah, tetapi berfungsi seperti kunci asing. Saya menyimpan nomor id item dari tabel InnoDB dan menggunakannya untuk melakukan pencarian halaman pada hasil pencarian.
Kenzo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.