Я хочу сделать некоторый базовый эксперимент на PostgreSQL, например, для создания взаимоблокировок, для создания неповторяющихся чтений и т. Д. Но я не мог понять, как запускать сразу несколько транзакций см. такое поведение. Может ли кто-нибудь дать мне какую-нибудь идею?Как выполнять несколько транзакций одновременно в PostgreSQL
ответ
Открыть более одного psql
сеанс, один терминал за сеанс.
Если вы находитесь в Windows, вы можете сделать это, запустив psql
через меню «Пуск» несколько раз. На других платформах открывайте пару новых терминалов или терминальных вкладок и начинайте с psql
.
я обычно делаю это, когда я рассмотрение запорных и параллелизм вопросов, используемые в ответах как:
... наверное, больше. Полезный трюк, когда вы хотите настроить условие гонки, - это открыть третью сессию psql
и BEGIN; LOCK TABLE the_table_to_race_on;
. Затем запустите операторы на других сеансах; они заблокируют замок. ROLLBACK
сделка, удерживающая блокировку стола, и другие сессии будут гоняться. Это не идеально, поскольку он не имитирует параллелизм смещения-начала-времени, но он по-прежнему очень полезен.
Другие варианты указаны в this later answer по аналогичной теме.
Craig Ringer обеспечивает способ открытия транзакций с несколькими транзакциями вручную, если вы обнаружите, что это не очень удобно, вы можете использовать сразу несколько транзакций.
Сначала я подумал, что это может быть изящной идеей, но, читая документацию pgbench, мне не ясно, как она реагирует на условия, которые OP пытается проверить: «deadlocks, non-repeatble reads and etc.» Я пойду за подходом Крейга. –
В этом более позднем ответе вы также можете использовать изолирующий элемент из 'src/test/isol': http://stackoverflow.com/a/17055880/398670 –
pgbench, вероятно, лучшее решение в вашем случае. Он позволяет тестировать различные сложные контентные ресурсы ресурсов, взаимоблокировки, многоклиентский, многопоточный доступ.
Чтобы получить dealocks вы можете просто щелкнуть правой некоторые сценарий, как это ('bench_script.sql):
DECLARE cnt integer DEFAULT 0;
BEGIN;
LOCK TABLE schm.tbl IN SHARE MODE;
select count(*) from schm.tabl into cnt;
insert into schm.tbl values (1 + 9999*random(), 'test descr');
END;
и передать его в pgbench с -f параметра.
Для более детального использования pgbench я бы рекомендовал прочитать официальное руководство для postgreSQL pgBench
и получить acquented с моим pgbench вопрос resolved recently here.
- 1. EF6: несколько транзакций одновременно
- 2. Выполнять несколько коммандов одновременно
- 3. Выполнять несколько testng.xml одновременно
- 4. Как выполнять несколько анимаций одновременно в mootools?
- 5. Выполнять несколько сценариев python одновременно
- 6. Как мы можем делать несколько транзакций одновременно в окнах 8?
- 7. Как выполнять несколько вызовов SOAP одновременно
- 8. Выполнять несколько методов одновременно, но в порядке
- 9. Выполнять несколько запросов одновременно в SAS
- 10. Можно ли одновременно выполнять несколько методов?
- 11. PostgreSQL - одновременно вставлять данные в несколько таблиц
- 12. Выполнять несколько сценариев Python одновременно с PHP
- 13. Может ли соединение выполнять несколько действий одновременно?
- 14. Как выполнять две функции одновременно
- 15. Как выполнять эти функции одновременно?
- 16. Сколько транзакций в секунду Postgresql поддерживает
- 17. PostgreSQL блокировка транзакций
- 18. NodeJS: Как выполнять несколько HTTP-запросов одновременно каждые 3 секунды?
- 19. Выполнять два запроса одновременно
- 20. Выполнять два потока одновременно
- 21. Несколько транзакций PayPal сразу
- 22. Выполнять хранимую процедуру postgreSQL как одну транзакцию
- 23. Выполнять несколько приложений параллельно?
- 24. Выполнять две команды одновременно в Elm
- 25. Выполнять несколько функций одновременно с pic16f877a с помощью C
- 26. Выполнять несколько весенних периодических заданий одновременно с различными параметрами
- 27. Настроить транзакцию транзакций PostgreSQL настойчиво
- 28. PostgreSQL большая одиночная транзакция медленнее, чем несколько транзакций
- 29. Выполнять две функции jQuery одновременно
- 30. Выполнять несколько SQL-запросов одновременно с помощью многопоточности
Это зависит от того, какой клиент SQL вы используете. –