Как оптимизировать множество запросов в PDO с большим таймаутом?
Приветствую! Ситуация такова, что при запуске из консоли создается одно подключение к PDO, затем идут многочисленные запросы к большой бд, сотни запросов, некоторые простые, некоторые нет, большая часть с DELETE с одним-двумя условиями. Через некоторое время выполнение зависает (ничего не происходит в бд и висит бесконечно), при этом на простых запросах, при перезапуске отрабатывает без проблем до конца. Так как это все работает более часа, пока подозреваю, что или надо переподключить соединение с БД или есть настройки PDO специально для таких случаев. Ответа пока нет нашел
удостоверься что действительно ничего не происходит или что именно происходит во время зависания, какие запросы в это время что то ждут (может взаимная блокировка delete и select), что происходит в это время с машиной? нагрузка на процессор, память, диск.. проверь ошибки, может место на диске кончилось?
TheAndrey7, какое-то время процесс виден в выводе SHOW PROCESSLIST, но потом пропадает и все. Тут еще ньюанс, что локально на урезанной версии БД все работает на ура. Там те же таблицы и запросы, но 10% оставлено строк.
FanatPHP, ну здесь если со второго раза дорабатывает, удаляя остатки, то появилось предположение, что само подключение не оптимизировано. Запросы ведь не представляют сложности в отдельности.
вариант 1: не использовать постоянное соединение т.е. PDO::ATTR_PERSISTENT = false
вариант 2: реализовать стек запросов
вариант 3: посмотреть настройки mysql сервера, там должно быть что-то вроде mysqlnd.net-read-timeout
при чем здесь постоянные соединения, в консольном-то приложении.
или при чем здесь "стек запросов"
или прочитать по своей же ссылке, что тhe MySQL Client Library sets a default timeout of 24 * 3600 seconds (1 day) and mysqlnd now uses the same very long timeout.