Тестирование параллелизма и / или целостности транзакций в веб-приложении с помощью JMeter

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

Вопрос

Я довольно новичок в работе с несколькими потоками в базе данных (большая часть моей карьеры прошла во внешнем интерфейсе).

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

Я только что написал сообщение в блоге об этой процедуре Здесь:

Тестирование с помощью JMeter

Судя по моим результатам, мое простое php-приложение, похоже, сохраняет целостность транзакций без изменений (как видно из данных в моих csv-файлах, которые совпадают с данными, которые я повторно извлек из базы данных):

CSV-файлы:

alt csv for al alt csv for bl

Запрос данных для обоих пользователей После тестового запуска JMeter:

alt alt

Прав ли я в своем предположении, что целостность транзакционных данных не нарушена?

Как вы проверяете параллелизм?

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

Решение

Почему бы не использовать InnoDB и не получить тот же эффект без ручной блокировки таблицы?

Кроме того, от чего вы защищаетесь?Рассмотрим двух пользователей (Билла и Стива).:

  1. Запись о загрузке счетов 1234
  2. Стив загружает рекорд 1234
  3. Стив изменяет запись 1234 и отправляет
  4. Билл немного ждет, затем обновляет устаревшую запись 1234 и отправляет.Эти изменения выбивают Билла из колеи.

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

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

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

Редактировать

Насколько я помню, MyISAM имеет особое поведение для вставок.Ему вообще не нужно блокировать таблицу для вставки, поскольку она просто добавляется в конец таблицы.Это может быть неверно для таблиц с уникальными индексами или неавтоинкрементируемыми первичными ключами.

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