Мой сценарий:Postgresql параллельно насыпной ВСТАВИТЬ с работником не распараллеливание
- 10 работник
- Database установил 100 макс соединений
- Каждый работник имеет свой собственный DB соединения (не более 10 соединений.)
- Каждый рабочий начинает транзакцию (BEGIN; COMMIT;)
- Каждый работник вставляет данные в одну и ту же таблицу с объемной вставкой внутри транзакции
- Данные для вставки, например. 1 миллион строк
- Каждый рабочий обрабатывает 1000 строк (партии размером 1000)
запроса каждого рабочего:
BEGIN;
INSERT INTO "test_tbl" ("id",...) VALUES
(...),(...),...[1000 entries]... RETURNING id;
COMMIT;
Таблица test_tbl
имеет единственное ограничение PRIMARY KEY (id)
с индексом CREATE UNIQUE INDEX formulas_pkey ON formulas USING btree (id)
Задача
После многочасового анализа выясняется, что рабочий ожидает, что другой рабочий закончит вставку. Почему рабочие не могут вставлять новые данные в одну и ту же таблицу одновременно?
UPDATE
Я снял все ограничения и все индексы (первичные ключи, внешние ключи и т.д.), но по-прежнему та же проблема. Нет распараллеливания.
Добавлено примечание:
- данных для вставки, например, 1 миллион строк
- Каждый работник обрабатывает 1000 строк (партии размером 1000)
Аналогичный [вопрос SO] (http://stackoverflow.com/q/32087233/1835769). – displayName