MySQL Process List - заблокированная проблема - PullRequest
0 голосов
/ 20 ноября 2011

В списке процессов MySQL показано, что несколько запросов SELECT заблокированы.Время заблокированного шоу более 4000

|   24 | user | localhost | database | Query   | 4725 | Locked   | SELECT * FROM data  
|   25 | user | localhost | database | Query   | 4725 | Locked   | SELECT * FROM data
|   26 | user | localhost | database | Query   | 4725 | Locked   | SELECT * FROM data

PHP-скрипт выполнялся несколько раз, но затем SELECT перешел в заблокированное состояниеКак решить эту проблему?

$SQL = "SELECT * FROM data";
$query = $db->prepare($SQL);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
    //Do something
    sleep(2);
}

Ограничивает ли сервер MySQL запрос SELECT для одновременного запуска?это можно изменить?

Ответы [ 3 ]

2 голосов
/ 20 ноября 2011

Вы должны запустить show engine innodb status \G, чтобы увидеть, какой запрос удерживает эту блокировку.

После обсуждения этого в комментариях и слушания о том, что MyISAM используется и что есть много записей, я предлагаю вам перейти на InnoDB.

InnoDB некоторое время использовался по умолчанию иобычно лучше.В этом случае вы получите блокировку на основе строк.InnoDB также разрабатывается больше, чем MyISAM.

0 голосов
/ 20 ноября 2011

Насколько велики ваши столы?

INNODB - это не волшебство.может помочь некоторая информация о системе.

0 голосов
/ 20 ноября 2011

Если в вашем списке процессов есть только операторы select, это, вероятно, связано с ограниченными доступными ресурсами на вашем сервере. Если это так, вы можете избежать этой проблемы, попытавшись оптимизировать запросы, которые выполняются, если это возможно, или попытаться реализовать какое-либо кэширование на сервере. Вы также можете понизить системную переменную max_connections, но это не может быть жизнеспособным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...