Мне нужно, чтобы PHP-приложение обнаружило, когда база данных MySQL находится в readlock и выдает сообщение об ошибке. Легко, но есть ли какая-нибудь команда MySQL, которую мы можем запустить, чтобы проверить текущее состояние блокировки, а не просто застревать систему, поскольку запрос поставлен в очередь для разблокировки?
Приветствия,
Джонатон
Изменить: база данных помещается в readlock администратором базы данных, но наш клиент хочет, чтобы приложение автоматически обрабатывало эту ситуацию... Я ничего не нашел во время прохождения документов, поэтому просил экспертов: -)
После проверки документов, похоже, нет способа сделать это через PHP mysql C API
Вы можете просмотреть обнаруженные блокировки, запустив "SHOW ENGINE [EngineName] STATUS", заменив имя двигателя на INNDOB, MyISAM или какой-либо другой движок запертой таблицы.
Вы также можете получить информацию о блокировке, запустив "mysqladmin debug" из командной строки
Люди запросили команду SHOW LOCKS, но она пока не существует.
Это все, что я могу установить из документов. Я надеюсь, что у кого-то есть решение для этого, поскольку это может быть очень полезно для меня.
Так как ваш PHP script ожидает ответа от сервера MySQL, может быть сложно определить, в каком состоянии он выполнил запрос, когда он выполняется. Если у вас возникли проблемы с чтением блокировок в запросах, вам, вероятно, лучше придется решать проблемы и расследовать, почему ваши запросы блокируются до такой степени, что вы вызываете зависание ваших скриптов, вместо того, чтобы просто кататься вместе с некоторыми отрывочными обработчиками для него, потому что заблокированные запросы могут указывать на серьезную проблему.
Обратитесь к документации MySQL и блогу производительности mysql для указателей о том, как настроить параметры запуска для вашего сервера MySQL, чтобы повысить производительность. Также убедитесь, что вы тщательно используете PHP-сессии управляемым способом - если у вас одновременно есть много асинхронных запросов к вашему серверу от одного пользователя, PHP иногда может зависать, потому что файл сеанса заблокирован из нескольких потоков, что делает базу данных запросы зависают с ним. Это серьезная проблема, с которой мы столкнулись.
Заблокированные запросы могут быть довольно сложными для устранения неполадок, но самое лучшее, что вы можете сделать, это расследовать основную причину того, почему они блокируются и разрешают это. Выполнение ПОКАЗАНИЯ ПОЛНОГО ПРОЦЕССА; предоставит вам список всех ваших открытых подключений к вашей базе данных и предоставит вам информацию, которая поможет вам определить медленные запросы, которые блокируют последующие запросы.
Надеюсь, что это поможет, удачи.
Если ваше приложение является единственной возможностью доступа и потенциальной блокировки указанной базы данных, вы можете использовать GET_LOCK и RELEASE_LOCK mysql, прежде чем пытаться получить доступ к базе данных.
Если у вас нет контроля над тем, как он заблокирован, тогда мне придется отнестись к более мудрым людям, кроме меня.