Как избежать блокирования SELECT: s в MySQL при использовании MyISAM - PullRequest
1 голос
/ 02 августа 2009

MyISAM использует блокировку на уровне таблицы, что означает, что SELECT: s блокируются во время выполнения INSERT / UPDATE: s.

Чтобы решить проблему заблокированных SELECT: я рекомендовал настроить MySQL со следующими параметрами:

  • low_priority_updates=1
  • concurrent_insert=2

Каковы недостатки использования low_priority_updates=1 и concurrent_insert=2?

1 Ответ

2 голосов
/ 02 августа 2009

Вот отличное сообщение из блога производительности MySQL , в котором описывается часть этого

Блокировка приоритетов . По умолчанию MySQL рассматривает обновления как более высокий приоритет операции. Вы можете использовать SELECT HIGH_PRIORITY или UPDATE LOW_PRIORITY отрегулировать это, или вы можете просто установить опция low_priority_updates. Тем не мение поведение по умолчанию означает любое ОБНОВЛЕНИЕ заявление, которое заблокировано долгим Запуск выбора также будет блокировать дальше выбирает из этой таблицы - они будут придется ждать, пока выполняется ОБНОВЛЕНИЕ который ждет на SELECT для полный. Это часто не учитывается и люди думают - «ОК. Я пишу свой сценарий, так что делает короткие обновления, так что не будет ничего блокировать »- это еще может вызвать полный блок, если есть долго выбирает бег.

Еще одна публикация тестов concurrent_inserts и описание возможных минусов, хотя посту уже 3 года.

...