Parece que es
- Desequilibrio del índice con el tiempo
- Fragmentación de disco
- Fragmentación de archivos de datos internos de innodb
Podrías intentar analyze table foo
que no toma bloqueos, solo unas pocas inmersiones de índice y toma unos segundos.
Si esto no lo soluciona, puede usar
mysql> SET PROFILING=1;
mysql> INSERT INTO foo ($testdata);
mysql> show profile for QUERY 1;
y debería ver dónde se pasa la mayor parte del tiempo.
Aparentemente, innodb funciona mejor cuando las inserciones se realizan en orden PK, ¿es este su caso?