我想對PostgreSQL做一些基本的實驗,例如生成死鎖,創建不可重複的讀取等等。但我無法弄清楚如何一次運行多個事務看到這樣的行爲。 任何人都可以給我一些想法?如何在PostgreSQL中同時運行多個事務
回答
打開多個psql
會話,每個會話一個終端。
如果您在Windows上,可以通過多次啓動「開始」菜單啓動psql
。在其他平臺上打開幾個新的終端或終端選項卡,並在每個平臺中啓動psql
。
我經常這樣做,當我檢查鎖定和併發的問題,答案一樣使用:
...可能更多。當您想要設置競賽條件時,一個有用的技巧是打開第三個psql
會話和BEGIN; LOCK TABLE the_table_to_race_on;
。然後在其他會話中運行語句;他們會阻止鎖。 ROLLBACK
持有表鎖的交易和其他會話將會競賽。這並不完美,因爲它不能模擬偏移開始時併發性,但它仍然非常有用。
其他替代方法在this later answer中對相似主題進行了概述。
克雷格林格提供了一種方式,可以打開多個交易manualy,如果您發現不是很方便,您可以使用pgbench一次運行多個交易。
起初我認爲這可能是一個簡潔的想法,但在閱讀pgbench的文檔時,我不明白它是如何響應OP試圖測試的條件:「死鎖,非重複讀取等」。我會去克雷格的方法。 – 2013-04-23 08:59:07
通過這個稍後的答案,你也可以使用'src/test/isolation'中的isolationtester:http://stackoverflow.com/a/17055880/398670 – 2013-06-12 00:30:58
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;
,並通過它與-f參數pgbench。
如需更詳細的pgbench使用我建議閱讀官方手冊 postgreSQL pgBench
,並與我pgbench問題resolved recently here得到acquented。
- 1. PostgreSQL - 使兩個事務同時運行
- 2. 如何在Postgresql中同時執行兩個事務?
- 3. 如何同時運行多個「任務」?
- 4. 如何在同一事務中並行運行多個數據流任務?
- 5. 同時運行多個定時事件
- 6. 事務(在我的MySQL中)如何在同時運行時運行?
- 7. 如何在CakePHP3中運行事務,同時檢索最後一個插入標識併爲PostgreSQL和MySQL工作?
- 8. 如何在不同線程中同時運行多個QDialog?
- 9. 兩個事務可以在Oracle中同時運行嗎?
- 10. 如何在不同的AppDomain中運行多個服務實例?
- 11. 如何在android中同時運行多個服務而沒有任何衝突?
- 12. 如何安全地同時運行多個任務?
- 13. 在crontab中同時運行多個任務沒有延遲
- 14. 運行多個任務同時在r中
- 15. PostgreSQL在同一連接上的多個事務
- 16. 同時運行多個類?
- 17. 運行多個Asyntasks同時
- 18. 如何在NetLogo中同時運行多個程序?
- 19. 如何在Visual Studio中同時運行多個項目
- 20. 如何在python中同時運行多個循環函數?
- 21. 如何在目標C中同時運行兩個多線程?
- 22. 如何在linux中同時運行多個shell命令
- 23. 如何在單節點中同時運行多個映射器
- 24. 如何在Eclipse中同時運行多個設備獲取Logcat
- 25. 如何在RCP中同時運行多個作業?
- 26. 如何在兩個不同的會話中同時並行運行相同的計劃任務並行運行?
- 27. Akka是否同時運行同一事件的多個實例?
- 28. PostgreSQL - 如何從事務塊外的代碼運行VACUUM?
- 29. 如何防止SQL同時運行事務
- 30. Flyway:在單個事務中運行多個遷移
這取決於您使用的是哪個SQL客戶端。 – 2013-04-23 06:37:57