Преимущества блокировки уровня таблицы


7

Каковы преимущества блокировки уровня таблицы, которая используется механизмом хранения MyISAM? Блокировка уровня строк имеет множество преимуществ, таких как параллельные обновления и чтения, которые не блокируют таблицу.

Редактировать Широко распространено мнение, что блокировка уровня стола предотвращает блокировку. Но стоит ли предотвращать взаимоблокировки за счет параллелизма?

  0

[Это обсуждение] (http://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam) может содержать некоторую релевантную информацию для вас. 14 сен. 112011-09-14 20:57:50

  0

Эта дискуссия о характеристиках MyISAM и InnoDB ничего не существует о преимуществах блокировки уровня таблицы. 14 сен. 112011-09-14 21:05:21

5

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

Когда вы пытаетесь вставить INSERT/UPDATE/DELETE из заблокированной таблицы, вам нужно будет подождать, пока она не будет доступна, или пока вы не получите тайм-аут (по умолчанию 28800 секунд). При блокировке блокировки на уровне строки вы немного ждете, если она не является бесплатной, и если сервер обнаруживает своего рода «бесконечный цикл» - где 2 соединения не откажутся от строки - тогда он будет отклонять оба соединения быстро и зайти в тупик.

Если вы пытаетесь решить запиранием, я хотел бы предложить вам взглянуть на следующие вещи:

  • Случается ли затор на плохой код в сделке? действительно ли нужно «удерживать» строку для завершения вашего вычисления и обновления?
  • Есть ли указатель для условия в вашем заявлении? иначе InnoDB действительно может пометить всю таблицу как ожидающую обновления.
  • Не может ли быть, чтобы жесткий диск на сервере не фиксировал изменения InnoDB достаточно быстро? работает ли контрольная точка на сервере, вызывает проблемы/киоски с InnoDB?
  • Это из-за автоматической блокировки приращения? Если это так, может быть, вы должны смотреть на более либеральное авто инкрементирования - установка http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html (также смотрите на замке на уровне строк, чтобы решить некоторые из проблем, вызванных такими изменениями)

3

Стол-замок (такой как используемый MyISAM) не содержит deadlock вопросов.

  0

BTW +1 для ответа сначала на тупик !!! 14 сен. 112011-09-14 21:17:32


6

Поскольку графики MySQL запросы для выполнения в этой манере:

  • запросов на запись (например, обновления и удаления) имеет приоритет над запросами на чтении (селекция)
  • Сервера выполняет пишет ФИФО образом (в порядке поступления)

Каковы преимущества?

С MyISAM никогда не могут возникать тупиковые блоки. Таким образом, сервер MySQL может управлять всеми конкурирующими, явными (LOCK TABLEs) или implcit (Any DML).

Пока таблица MyISAM не имеет удаленных или обновленных записей, параллельные вставки могут свободно возникать безнаказанно. Это действительно включает INSERT на таблицу с явным блокированием чтения.

Для любой таблицы с зазорами запуск OPTIMIZE TABLE приведет к удалению этих зазоров и разрешению одновременных вставок еще раз.

Дополнительную информацию см. "MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2.

  0

Таким образом, тупик никогда не произойдет, но при этом его преимущество по сравнению с его недостатками, такими как отсутствие параллелизма. И при высокой нагрузке медленная пропускная способность базы данных. 14 сен. 112011-09-14 21:10:03

+2

@ rickjames преимущество myisam не в том, как он управляет обновлениями. Это лучше всего в ситуации, не связанной с записью. 14 сен. 112011-09-14 21:13:01

  0

К сожалению, многие люди используют WordPress, Drupal и MoveableTypes CMS, по умолчанию это всегда MyISAM. Если у кого-то есть сайт с высоким трафиком, им нужно уйти от MyISAM. В противном случае MyISAM должен быть достаточным. 14 сен. 112011-09-14 21:13:45

  0

@DTest право, но даже в интенсивной системе чтения, насколько выгодно по сравнению с блокировкой уровня строки? 14 сен. 112011-09-14 21:14:38

  0

Даже в читающей интеллект системе только один оператор DELETE или UPDATE быстро аннулирует все преимущества MyISAM. 14 сен. 112011-09-14 21:16:59

  0

@ rickjames удаление тупиков - это «преимущество блокировки стола над блокировкой строк». MyISAM имеет другие преимущества по сравнению с innodb, но это не дискуссия об этом (innodb имеет много преимуществ по сравнению с myisam!) 14 сен. 112011-09-14 21:25:24

  0

Это, я боюсь, очень типично для MySQL организации. Причина, по которой MyISAM имеет блокировку на уровне таблицы, заключается в том, что они не смогли реализовать блокировку на уровне строк (это было предоставлено третьей стороне, которая предоставила нам InnoDB). Но они стараются вращать его, как будто они все время. Я помню, они говорили, что вам не нужны внешние ключи, транзакции, сохраненные procs и т. Д. И т. Д., Когда они просто не могли их сделать. Возьмите их документацию с ** БОЛЬШИМ ** щепоткой соли. 15 сен. 112011-09-15 18:28:52


3

Два преимущества.

a. Столбцы столов являются примером brute-force algorithm для решения проблемы взаимоблокировок. Грубая сила всегда работает, при подходящих значениях «работ».

Кен Томпсон, соавтор Unix, как сообщается, произнес эпиграммы «Если вы сомневаетесь, использовать грубую силу». Вероятно, он намеревался использовать это как ха-ха только серьезно, но исходное преимущество ядра Unix для простых, надежных и переносимых алгоритмов над хрупкими «умными» делает , по-видимому, было важным фактором успеха этой ОС. Подобно так много других компромиссов в разработке программного обеспечения, выбор между грубой силой и сложностью, тонко настроенной умностью часто бывает трудной , которая требует как инженерного, так и тонкого эстетического суждения.

b. Вы, несомненно, будете принимать разные решения, так как вы приобретаете как инженерное, так и эстетическое суждение. Это не влияет на действительность «a» выше.