Versi engine default sebelum MySQL 5.5 adalah MyISAM, di mana engine ini memiliki kekurangan dalam hal tidak bisa melakukan concurrent update pada sebuah tabel, karena setiap operasi pada suatu tabel akan membuat “table lock”. Untuk Anda yang membutuhkan operasi manipulasi tabel secara concurrent, ini akan membuat server load jadi sangat tinggi karena antrian proses menjadi sangat lambat.
Solusinya? Gunakan engine InnoDB pada tabel-tabel MySQL Anda. InnoDB mampu menerapkan row level locking untuk menjaga konsistensi data, sehingga operasi pada row-row lainnya dalam satu tabel tetap dapat dilakukan dan tidak “locked” seperti pada engine MyISAM.
Pada versi MySQL 5.5 ke atas secara default harusnya tabel-tabel baru sudah otomatis memakai engine InnoDB. Tapi jika Anda tidak beruntung seperti: memiliki aplikasi lama yang memakai engine MyISAM atau mendapat shared hosting yang walaupun memakai MySQL 5.5+ tapi setting default tabelnya MyISAM, Anda bisa lakukan langkah berikut:
Pertama, generate query untuk mengubah semua jenis engine menjadi InnoDB, jenis-jenis querynya akan dilampirkan di bawah.
Query di atas tidak akan langsung mengubah tabel-tabel menjadi InnoDB, tapi akan menghasilkan query lain di mana query itulah yang akan merubah engine tabel-tabel yang ada menjadi InnoDB.
Kedua, dari copy query yang dihasilkan dari query di atas, lalu run query tersebut.
Berikut contoh querynya, bisa dilakukan dua arah (MyISAM ke InnoDB, atau InnoDB ke MyISAM)
Mengubah Semua Tabel Dalam Satu Database Tertentu Dari MyISAM ke InnoDB
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME,' ENGINE=InnoDB;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'DBNAME' AND ENGINE = 'MyISAM' AND TABLE_TYPE = 'BASE TABLE'
Mengubah Semua Tabel Dalam Satu Database Tertentu Dari InnoDB ke MyISAM
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME,' ENGINE=MyISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'DBNAME' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'
Mengubah Seluruh Tabel Dalam Semua Database Dari MyISAM ke InnoDB
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=InnoDB;') FROM information_schema.TABLES WHERE ENGINE = 'MyISAM';
Mengubah Seluruh Tabel Dalam Semua Database Dari InnoDB ke MyISAM
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=MyISAM;') FROM information_schema.TABLES WHERE ENGINE = 'InnoDB';
Referensi: Percona, Ryadel, dibantu juga oleh tech support LiquidWeb
Leave a Reply