Определить, когда таблицы MySQL находятся в состоянии чтения (из PHP)

0

Мне нужно, чтобы PHP-приложение обнаружило, когда база данных MySQL находится в readlock и выдает сообщение об ошибке. Легко, но есть ли какая-нибудь команда MySQL, которую мы можем запустить, чтобы проверить текущее состояние блокировки, а не просто застревать систему, поскольку запрос поставлен в очередь для разблокировки?

Приветствия,

Джонатон

Изменить: база данных помещается в readlock администратором базы данных, но наш клиент хочет, чтобы приложение автоматически обрабатывало эту ситуацию... Я ничего не нашел во время прохождения документов, поэтому просил экспертов: -)

Теги:

3 ответа

1
Лучший ответ

После проверки документов, похоже, нет способа сделать это через PHP mysql C API

Вы можете просмотреть обнаруженные блокировки, запустив "SHOW ENGINE [EngineName] STATUS", заменив имя двигателя на INNDOB, MyISAM или какой-либо другой движок запертой таблицы.

Вы также можете получить информацию о блокировке, запустив "mysqladmin debug" из командной строки

Люди запросили команду SHOW LOCKS, но она пока не существует.

Это все, что я могу установить из документов. Я надеюсь, что у кого-то есть решение для этого, поскольку это может быть очень полезно для меня.

  • 0
    Я знаю, что уже поздно, но спасибо за ответ, полезно! :)
  • 0
    Рад, что смог помочь. Я полностью забыл об этом ответе :)
2

Так как ваш PHP script ожидает ответа от сервера MySQL, может быть сложно определить, в каком состоянии он выполнил запрос, когда он выполняется. Если у вас возникли проблемы с чтением блокировок в запросах, вам, вероятно, лучше придется решать проблемы и расследовать, почему ваши запросы блокируются до такой степени, что вы вызываете зависание ваших скриптов, вместо того, чтобы просто кататься вместе с некоторыми отрывочными обработчиками для него, потому что заблокированные запросы могут указывать на серьезную проблему.

Обратитесь к документации MySQL и блогу производительности mysql для указателей о том, как настроить параметры запуска для вашего сервера MySQL, чтобы повысить производительность. Также убедитесь, что вы тщательно используете PHP-сессии управляемым способом - если у вас одновременно есть много асинхронных запросов к вашему серверу от одного пользователя, PHP иногда может зависать, потому что файл сеанса заблокирован из нескольких потоков, что делает базу данных запросы зависают с ним. Это серьезная проблема, с которой мы столкнулись.

Заблокированные запросы могут быть довольно сложными для устранения неполадок, но самое лучшее, что вы можете сделать, это расследовать основную причину того, почему они блокируются и разрешают это. Выполнение ПОКАЗАНИЯ ПОЛНОГО ПРОЦЕССА; предоставит вам список всех ваших открытых подключений к вашей базе данных и предоставит вам информацию, которая поможет вам определить медленные запросы, которые блокируют последующие запросы.

Надеюсь, что это поможет, удачи.

  • 0
    Извините, я не был достаточно ясен ... запросы блокируются, потому что администратор БД собирается заблокировать базу данных от новых обновлений во время обслуживания. Однако клиент хочет, чтобы его приложение могло автоматически обнаруживать и выдавать сообщение об ошибке, когда таблицы заблокированы ...
0

Если ваше приложение является единственной возможностью доступа и потенциальной блокировки указанной базы данных, вы можете использовать GET_LOCK и RELEASE_LOCK mysql, прежде чем пытаться получить доступ к базе данных.

Если у вас нет контроля над тем, как он заблокирован, тогда мне придется отнестись к более мудрым людям, кроме меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню