Триггеры в высоко транзакционной системе - PullRequest
5 голосов
/ 22 августа 2011

Мы создаем высокотранзакционную систему с MySQL в качестве БД (движок innodb).У нас есть один триггер вставки и обновления для таблицы t1, который обновляет таблицы t2 и t3.Мы наблюдали, что всякий раз, когда объем одновременного пользователя высок, мы получаем тупиковую блокировку для таблицы t1.Мы предполагаем, что триггер выдает блокировку таблицы, пока не завершит свое выполнение.Мы сбросили триггер на t1, и на удивление больше нет тупиков.

Мой вопрос:

  1. Не рекомендуется ли иметь триггер в системе с высокой степенью транзакции
  2. Если нет, запустите другие варианты реализации той же логики.

Таблица t1 имеет около 70000 строк и увеличивается ежедневно.

Оцените любые входные данные.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 октября 2011

Вместо этого вы можете использовать транзакции и выполнять всю обработку на стороне клиента.

START TRANSACTION;

insert into t1;
update t2;
update t3;

COMMIT;

Старайтесь не использовать конструкции «обновить выбор» и «вставить выбор», если вы можете использовать данные, предоставленные клиентом Также InnoDB использует блокировку строк, которая лучше, чем блокировка таблиц, которую использует MyISAM.

...