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

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

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

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

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

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

CSV-файлы:

alt csv для всехalt csv для bl

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

altalt

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

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


person leeand00    schedule 29.04.2009    source источник


Ответы (1)


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

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

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

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

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

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

ИЗМЕНИТЬ

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

person Gary Richardson    schedule 30.04.2009
comment
хм, интересно... так что я не решил проблему... Я знаю об ограничениях для таблиц MyISAM, но, к сожалению, хост, который я использую, не поддерживает InnoDB... Да, я мог бы установить все из этого материала в моем домашнем ящике... php, mysql и т. д., что мне, вероятно, следует, чтобы я мог проверить это по-настоящему. Спасибо за понимание! - person leeand00; 30.04.2009
comment
... также приложение на самом деле не выполняет никаких обновлений, оно просто вставляет и читает (это очень простое приложение...), надеюсь, это означает, что все будет в порядке... - person leeand00; 30.04.2009
comment
Я делаю выбор перед вставкой, потому что одна из таблиц не увеличивается автоматически (у нее есть составной ключ из двух полей); Таким образом, вы должны сделать выбор в таблице перед вставкой новой записи, чтобы узнать, каков максимальный идентификатор для одного из полей с ключом. Другая часть составного ключа также является внешним ключом. - person leeand00; 30.04.2009
comment
ну, вы всегда можете отключить код блокировки таблицы и запустить тест jmeter, чтобы проверить те же результаты. - person Gary Richardson; 30.04.2009