Заблокированные таблицы MySQL влияют на связанные взгляды?

StackOverflow https://stackoverflow.com/questions/3008741

  •  26-09-2019
  •  | 
  •  

Вопрос

Так после прочтения Производительность в PDO / PHP / MySQL: транзакция против прямого выполнения Что касается проблем с производительностью, о которых я думал о том, что я сделал некоторые исследования столов блокировки в MySQL.

На http://dev.mysql.com/doc/refman/5.0/ru/table-locking.html.

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

Эта часть поразила меня, особенно потому, что большинство наших запросов будут обновлениями, а не вставки. Мне было интересно, создал ли один стол под названием FOO, на которой были выполнены все обновления / вставки, а затем представление, называемое foo_view (копию foo или, возможно, foo и связь нескольких других таблиц плюс foo), на котором произошла все вылеты, Будет ли эта ошибка блокировки еще?

То есть бы выбрать запросы на foo_view все еще нужно ждать обновления, чтобы закончить на foo?

Еще один краткий вопрос мой коллега спросил. Это влияет на кэширование? Т.е. если выбрать кэшировал, он попадет в кэш и возвращает результаты, или он будет дождаться, пока заблокировка будет окончательно?

Это было полезно?

Решение

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

С помощью справочной страницы MySQL на блокировка:

MySQL Grants Стол написать замки следующим образом:

  1. Если на столе нет замков, поместите замок записи на него.
  2. В противном случае положите запрос блокировки в очередь блокировки записи.

MySQL Grants стол читает замки следующим образом:

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

Стоит отметить, что это зависит от используемого вами двигателя базы данных. Мисам будет следовать шагам выше и заблокировать всю таблицу (даже если она разделена на несколько разделов), где работает двигатель Innodb. вместо этого сделает блокировку уровня строки.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top