J'ai une table ISAM avec ~ 50'000'000 enregistrements (tâches pour web crawler):Grande table MyISAM lent, même pour les insertions non simultanées/mises à jour
CREATE TABLE `tasks2` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(760) character set latin1 NOT NULL,
`state` varchar(10) collate utf8_bin default NULL,
`links_depth` int(11) NOT NULL,
`sites_depth` int(11) NOT NULL,
`error_text` text character set latin1,
`parent` int(11) default NULL,
`seed` int(11) NOT NULL,
`random` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `URL_UNIQUE` (`url`),
KEY `next_random_task` (`state`,`random`)
) ENGINE=MyISAM AUTO_INCREMENT=61211954 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Une fois toutes les quelques secondes une des options suivantes les opérations se déroulent (mais jamais en même temps):
- INSERT ... VALUES (500 lignes) - insère de nouvelles tâches
- UPDATE ... WHERE id IN (jusqu'à 10 IDs) - état des mises à jour pour le lot de tâches
- SELEC T ... WHERE (par next_random_task index) - charges lot de tâches pour le traitement
Mon problème est que les insertions et les mises à jour sont très lents - en cours d'exécution de l'ordre de dizaines de secondes, parfois plus d'une minute. Les sélections sont rapides, cependant. Pourquoi cela pourrait-il arriver et comment améliorer la performance?