PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 2
zTaunTz Отправлено: 10 Декабря, 2015 - 18:39:53 • Тема: Висящая транзация • Форум: SQL и Архитектура БД

Ответов: 3
Просмотров: 66
Faraon-san пишет:
Попробуй явно удалить unset объект где commit прописан.

Пробовал, не помогает. Запись анлочится только при завершении скрипта
zTaunTz Отправлено: 09 Декабря, 2015 - 13:51:20 • Тема: Висящая транзация • Форум: SQL и Архитектура БД

Ответов: 3
Просмотров: 66
Здравствуйте, не могу найти решение своей проблемы.

Таблица innodb
В качестве движка для mysql пробовал mysqli и PDO, результат один и тот же

Имеются php скрипты, каждый делает примерно вот что:
в цикле, проходит по списку ид записей из таблицы
1) стартует в мускуле новую транзацию
2) делает select * where id=xxx for update
3) делает или не делает update
4) делает commit или rollback
5) стартует новую транзакцию
..
В классе в __destruct() стоит явный commit

И вот ту начинается засада, второй скрипт, запущенный вскоре после первого почему то начинает тупить и ждать 50 секунд.
Начинаю копать, это время 50 сек - дефолтное значение innodb_lock_wait_timeout

Т.е., как будто commit применяет изменения, но запись остается все еще залоченной, пока не истечет таймаут.
Пробовал после commita делать реконнект - не помогает

А вот если второй скрипт запускается после того, как первый успел выполнится - проблем нет. Т.е. окончательно запись разлочивается только после закрытия php-скрипта или таймаута

Проверил интерлоки, на предмет того, что в первом скрипте лочатся например запись id=1, потом во втором id=2,3 , а потом первый скрипт пытается залочить id=2 - интерлоков нет.

Сделал логирование всех цепочек запросов, повторяю их тупо в мускуле - все работает.
Т.е. в одном окне сделал select for update, потом его же во втором окне, потом в первом делаю commit - и во втором запрос сразу же проходит, ничего не ждет.

Подскажите, куда копать? На буржуйских форумах ответ найти не могу, там какие-то упрощенные ответы.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB