Recently I had someone contact me about receiving an error message from a Joomla installation. The receiving the following error:
Error creating data base: Table ‘myjoomladatabase.v96bu_menu’
After some research I found the issue was a combination of:
1) Joomla’s table creation statements do not include a storage engine.
2) The MySQL server is defaulted to utilize the “InnoDB” storage engine.
When trying to create the “_menu” table manually I received the following from MySQL:
“ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.“
This can be remedied easily by either:
1) Adding “SET default_storage_engine=MYISAM;” to the top of any sql files creating tables in the installation.
2) Adding ” STORAGE ENGINE=MYISAM ” to each table creation statement where the table will not create.
In looking at Joomla’s website I have yet to find any easy way to contact anyone without registering for their website first. I would suggest they change their table creation statements to include a storage engine as follows:
STORAGE ENGINE=MYISAM
Joomla can be found at http://www.joomla.org/
MySQL can be found at http://www.mysql.com/
Unfortunately the key buffer iestlf has a big fat mutex around it (one per key buffer, that is, just one unless you use multiple key buffers), which is taken any time anyone modifies the key buffer (which includes bringing pages in AND out of it, which is done by selects as well as updates).This means that operations which do a large amount of key buffer work effectively block up the entire server even if they’re operating on an entirely different table.The example we see, is doing a lot of inserts with DELAY_KEY_WRITE on, then doing a flush table on that table. It effectively stops the world during the flush no index on any table at all may be touched whatsoever.