Saya punya server mysql 5.1 dengan database sekitar 450 tabel, mengambil 4GB. Sebagian besar dari tabel ini (semuanya kecuali 2) adalah MyIsam. Ini sebagian besar baik-baik saja (tidak perlu transaksi), tetapi aplikasi telah mendapatkan lalu lintas dan tabel tertentu telah terpengaruh karena penguncian tabel pada pembaruan. Itulah alasan 2 dari tabel tersebut adalah InnoDB sekarang.
Konversi pada tabel yang lebih kecil (baris 100rb) tidak butuh waktu lama, menyebabkan downtime minimal. Namun beberapa tabel pelacakan saya mendekati 50 juta baris. Apakah ada cara untuk mempercepat ALTER TABLE...ENGINE InnoDB
di meja besar? Dan jika tidak, adakah metode lain untuk mengonversi meminimalkan waktu henti pada tabel tulis-berat ini?
mysql-5
storage-engine
Derek Downey
sumber
sumber
Jawaban:
Biarkan saya mulai dengan mengatakan, saya benci ALTER. Itu jahat, IMHO.
Katakan, ini skema tabel Anda saat ini -
Inilah jalan yang saya rekomendasikan -
Buat objek tabel baru yang akan menggantikan yang lama:
Masukkan semua baris dari tabel lama dengan nama ke tabel baru:
Uji asap migrasi Anda:
Tukar nama tabel sehingga Anda dapat mempertahankan cadangan jika Anda perlu mengembalikan.
Lanjutkan ke pengujian regresi.
Pendekatan ini menjadi lebih dan lebih disukai dengan tabel dengan banyak indeks dan jutaan baris.
Pikiran?
sumber
ALTER TABLE
perlu lebih dariINSERT INTO...SELECT
50 juta baris?1) Perlindungan kerugian adalah fungsi dari paranoia. Selalu buat cadangan. Jika Anda benar-benar paranoid, buat cadangan lalu pulihkan dari cadangan.
2) Halaman manual MySQL ini memiliki instruksi untuk mengonversi tipe tabel.
3) PostgreSQL melakukan pencarian teks lengkap , The Sphinx Engine tampaknya melakukannya untuk MySQL
sumber
Ini X kali lebih mudah untuk mengoptimalkan seluruh server (konfigurasi memori, cache, indeks) ketika Anda hanya memiliki satu mesin yang digunakan. Memadukan myisam dengan innodb pada basis data besar akan selalu macet di beberapa titik yang dipaksakan oleh beberapa komproise agar kedua mesin bekerja dengan baik (tapi tidak unggul :)
Saya sarankan Anda untuk tertarik pada beberapa mesin pencari teks lengkap khusus seperti sphinx , lucene ( solr ) dan singkirkan dari lapisan basis data.
sumber