Сколько одновременных транзакций можно выполнять к одним и тем же таблицам?
Всем привет.
У меня вопрос по производительности транзакций.
Допустим есть какой-то сценарий который делает выборку из 6 таблицы, а потом делает вставку в 4 другие таблицы.
Весь сценарий (включая SELECT запросы) обернут в транзакцию.
Этот сценарий параллельно выполняют 500 потоков.
START TRANSACTION;
SELECT f FROM t1;
SELECT f FROM t2;
SELECT f FROM t3;
SELECT f FROM t4;
SELECT f FROM t5;
SELECT f FROM t6;
INSERT INTO t7;
INSERT INTO t8;
INSERT INTO t9;
INSERT INTO t10;
COMMIT;
Я полагаю, что таким образом на 100% гарантируется консистентность данных.
Вопросы:
1. Допустимо ли оборачивать в транзакции SELECT запросы?
2. Есть ли какое-то ограничение на количество запросов в транзакции?
3. Есть ли какое-то ограничение на количество потоков которые пытаются выполнить одновременно такой набор SQL инструкций?
4. Насколько большое количество конкурентных транзакций влияют на производительность?
1. Допустимо ли оборачивать в транзакции SELECT запросы?
- В режиме Read Committed запрос SELECT не будет видеть не закомиченные данные ваших вставок и если вы хотите видеть эти данные до комита, то нужно select вносить в транзакцию.
2. Есть ли какое-то ограничение на количество запросов в транзакции?
- Это зависит от размера лог файла для транзакции, глобальный параметр innodb_log_file_size
3. Есть ли какое-то ограничение на количество потоков которые пытаются выполнить одновременно такой набор SQL инструкций?
- Есть ограничение на кол-во открытых транзакций 128 * 1023.
4. Насколько большое количество конкурентных транзакций влияют на производительность?
- Чем больше работаете с БД тем больше на нее нагрузка. )))