MySQL запрос не возвращает вновь вставленную запись - PullRequest
2 голосов
/ 15 марта 2011

Мы наблюдаем это поведение случайным образом на вновь вставленных записях и только на производственной базе данных (Amazon RDS). Похоже, что-то связано с тупиком ... (об ошибках не сообщается)

Уязвимые таблицы - InnoDB, payment_id - автоинкремент, и время окончания всех транзакций составляет порядка миллисекунд. Все соединения находятся на одном сервере, автокоммит включен и репликация отсутствует (что касается документации Amazon).

Соединение № 1:

2011-03-07 14:09:54 ВСТАВИТЬ В платежи SET SET payment_transaction = 'XYZ'

Соединение № 2:

2011-03-07 14:10:06: ВЫБЕРИТЕ * ИЗ ПЛАТЫ, ГДЕ payment_transaction = ПРЕДЕЛ XYZ 0, 1

Ответ: пусто

2011-03-07 14:10:06: ВЫБРАТЬ * ИЗ ПЛАТЫ ЗАКАЗАТЬ НА payment_id DESC LIMIT 0, 1

Ответ: [payment_id] => 26242, [payment_transaction] => ABC

2011-03-07 14:50:06: ВЫБЕРИТЕ * ИЗ ПЛАТЫ, ГДЕ payment_transaction = XYZ LIMIT 0, 1

Ответ: [payment_id] => 26243, [payment_transaction] => XYZ

Ответы [ 2 ]

0 голосов
/ 17 марта 2011

Добавляя некоторые точки отладки к приложению, я заметил, что эти (случайным образом проблемные) вставки на самом деле занимают около 50+ секунд (в отличие от того, что было сказано в журнале).Поэтому для тех, у кого возникла эта проблема, обязательно сравните время начала и окончания INSERT в среде своего приложения.

0 голосов
/ 17 марта 2011

Зависит от того, какую функцию вы используете, если предпримете, чтобы увидеть, сколько строк влияет на использование инструкции SELECT mysql_num_rows () , используйте mysql_affered_rows () с DELETE, UPDATE qndВСТАВИТЬ инструкции в соответствии с this .

...