〜50'000'000レコード(Webクローラーのタスク)を含むMyISAMテーブルがあります。
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
数秒に1回、次のいずれかの操作が発生します(ただし、同時に発生することはありません)。
- INSERT ... VALUES(500行)-新しいタスクを挿入します
- UPDATE ... WHERE id IN(最大10 ids)-タスクのバッチの状態を更新します
- SELECT ... WHERE(next_random_task indexによる)-処理するタスクのバッチをロードします
私の問題は、挿入と更新が非常に遅いことです-数十秒のオーダーで、時には1分以上実行されます。ただし、選択は高速です。なぜこれが発生する可能性があり、パフォーマンスを向上させる方法は?