Приветствую.
Есть два подключения к базе данных. Первое используется для забора данных:
SELECT time, value FROM `table` WHERE time <= 1268409464 AND time >= 0 ORDER BY time LIMIT 86400
Второе для изменений
UPDATE `table` SET value=1.1 WHERE time=919462145
Т.е. хочется реализовать такой алгоритм: while (has rows) { fetch_row(connection #1); change_row(connection #2, value); }
Исползуя MyISAM тип базы данных, забор данных просто тихо прекращается. Используя InnoDB получаю «The total number of locks exceeds the lock tables».
> show full processlist;
| Id | User | Host | db | Command | Time | State | Info
| 109 | user | ip:39753 | database | Query | 6 | Locked | UPDATE EUR_USD SET value=1.126700 WHERE time=918252890 |
| 110 | user | ip:39754 | database | Query | 6 | Writing to net | SELECT time, value FROM `table` WHERE time <= 1268433749 AND time >= 918047320 ORDER BY time LIMIT 86400 |
Такая ситуация происходит если подключатся к серверу, запущенному на той же машине(вне зависимости от типа подключения tcp/unix socket). При удаленном подключении все работает корректно. Судя по processlist, mysql блокирует исполнение UPDATE запроса при локальном подключении.
Подскажите, в чем моя ошибка, что почитать?
--- Program language: C [gcc version 4.4.3 20100108] MySQL: Ver 14.14 Distrib 5.1.41, for linux-gnu (i486) using readline 6.1