Производительность блокировки на уровне строк InnoDB - сколько строк? - PullRequest
1 голос
/ 08 января 2010

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

Сколько это будет (около)?

РЕДАКТИРОВАТЬ: Очевидно, я неправильно сформулировал свой вопрос. Я знаю, что означают блокировки таблиц и строк, но мне было интересно, когда это имеет значение. Если бы я вставлял только 100 строк в день, конечно, блокировки таблицы было бы достаточно, но для случая, скажем, 100 строк в секунду, я думаю, InnoDB был бы лучшим выбором.

Мой вопрос: имеет ли смысл также блокировка строк для 10 строк в секунду или 5 строк в секунду? Когда этот выбор существенно влияет на производительность?

Ответы [ 2 ]

2 голосов
/ 08 января 2010

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

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

Редактировать: ваше редактирование в исходное сообщение помогает, но не очень много. Прежде всего, размеры строк и уровни задействованного оборудования имеют огромный эффект (вставка 8-байтовой строки в дюжину чередующихся жестких дисков SAS 15 КБ - это чуть-чуть быстрее, чем вставка строки в один мегабайт на один жесткий диск класса потребителя. ).

Во-вторых, в основном речь идет о количестве одновременных пользователей, поэтому схема вставки имеет большое значение. 1000 строк, вставленных в 3 часа ночи, вероятно, вообще не будут замечены. 1000 строк, вставленных равномерно в течение дня, означают немного больше (но, вероятно, только немного). 1000 строк, вставленных в пакетном режиме, сразу же, когда 100 других пользователей нуждаются в данных, могут немедленно кого-нибудь уволить (особенно, если один из этих 100 является владельцем компании).

0 голосов
/ 08 января 2010

MyISAM таблицы поддерживают одновременные вставки (иначе говоря, нет блокировки таблицы для вставок). Так что, если вы соответствуете критериям, нет проблем: http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html

Так что, как и большинство вещей, ответ "это зависит". Нет яркой линии теста. Только вы можете сделать определение; мы ничего не знаем о вашем приложении / оборудовании / статистике использования / и т.д. и, по определению, не может знать об этом больше, чем вы.

...