Будут ли взаимоблокировки влиять на меня, даже если я не использую транзакции?

Мы хотим перейти с MyISAM на InnoDB по нескольким причинам, но мы не собираемся использовать транзакции с BEGIN/COMMIT и т. д.

Есть ли случай, когда взаимоблокировки могут возникнуть только при использовании SELECT, INSERT, UPDATE и DELETE? Мы используем некоторые JOIN и, конечно же, у нас много INDEX.

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

Заранее спасибо за любые советы! :)


person Niclas    schedule 10.10.2011    source источник
comment
Взаимоблокировки в InnoDB представляют меньшую проблему, чем в MyISAM. MyISAM использует блокировку таблицы, InnoDB использует блокировку строки.   -  person Johan    schedule 10.10.2011
comment
См. этот ответ: stackoverflow.com/questions/5970210/   -  person ypercubeᵀᴹ    schedule 10.10.2011


Ответы (2)


Короче говоря, взаимоблокировки могут возникать, потому что (настройка по умолчанию — AUTOCOMMIT = ON, что означает) каждый отдельный оператор (SELECT, UPDATE, INSERT, DELETE) обрабатывается как отдельная транзакция в InnoDB и автоматически фиксируется сразу после выполнения.

См.: Неявная фиксация и откат транзакции

Но, как указывает @Johan, они должны быть менее проблемой в InnoDB, чем MyISAM, поскольку везде, где это возможно, используется блокировка на уровне строк.

Также проверьте ответ @MarkR на этот вопрос для получения более подробной информации: Объясните необъяснимый тупик


Для стресс-тестирования я слышал о Super Smack, но не использовал его. инструмент для бенчмаркинга и стресс-тестирования для MySQL и PostgreSQL.

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

person ypercubeᵀᴹ    schedule 10.10.2011

У вас есть 2 очень разных вопроса здесь.

1 Да, тупиковые ситуации могут возникать, даже если вы явно не используете транзакции, поскольку "внутренняя" блокировка на уровне строки используется для всех операторов вставки/обновления/удаления. Подробнее читайте здесь.

2 В общем, стресс-тестирование/тестирование производительности — нетривиальная задача, и не так много универсальных инструментов, которые справятся с ней хорошо. Как вы проводите стресс-тестирование других изменений в базе данных (добавление/изменение/удаление индексов, изменение схемы таблиц)?

person e.dan    schedule 10.10.2011
comment
Большое спасибо, я прочитаю документы и другие ответы выше. Мы не проводили никаких стресс-тестов, только ручное тестирование. но мы нашли несколько инструментов под названием loadimpact.com и loadstorm.com, похоже, это может быть полезно. - person Niclas; 20.10.2011