Idob
Idob

Reputation: 1650

Mysql changing table engine MyISAM to InnoDB

On my site I have a visitor's table with 10 million rows.
Every request to the site inserts row to the table, in case the table is locked (usually in optimize query) visitors can't get into the site
The table engine is MyISAM and I want to change it to InnoDB
I have few questions:

Upvotes: 12

Views: 12692

Answers (2)

Felipe Alonso
Felipe Alonso

Reputation: 413

oleksii.svarychevskyi is right, InnoDB uses row level locks, but if you do

ALTER TABLE table_name ENGINE = InnoDB;
to change table_name from MyIsam to InnoDB, there will be a metadata locking (at table level) because the original table engine was MyIsam.
If you try to do an UPDATE over table_name, this UPDATE will be enqueued until the ALTER TABLE ends (if you do a SHOW FULL PROCESSLIST you will see a "Waiting for table metadata lock" message associated to the UPDATE).

Upvotes: 5

oleksii.svarychevskyi
oleksii.svarychevskyi

Reputation: 1106

The easiest way is

ALTER TABLE table_name ENGINE = InnoDB;

If you use InnoDB engine you should not worry about locking tables, because this engine locks data by rows.

Upvotes: 19

Related Questions