[英]How to run multiple transactions concurrently in PostgreSQL
我想在PostgreSQL上做一些基本的實驗,例如生成死鎖,創建不可重復的讀取等等。但我無法弄清楚如何一次運行多個事務來查看這種行為。 誰能給我一些想法?
打開多個psql
會話,每個會話一個終端。
如果您使用的是Windows,則可以通過多次啟動菜單啟動psql
來實現。 在其他平台上打開幾個新終端或終端選項卡,並在每個終端啟動psql
。
我在檢查鎖定和並發問題時經常這樣做,在以下答案中使用:
......可能更多。 想要設置競爭條件時,一個有用的技巧是打開第三個psql
會話和BEGIN; LOCK TABLE the_table_to_race_on;
BEGIN; LOCK TABLE the_table_to_race_on;
。 然后在其他會話中運行語句; 他們會阻擋鎖。 ROLLBACK
持有表鎖的事務和其他會話將競爭。 它並不完美,因為它不模擬偏移啟動時並發,但它仍然非常有用。
其他替代方案在后面的答案中概述了類似的主題。
pgbench可能是你的最佳解決方案。 它允許您測試不同的復雜數據庫資源爭用,死鎖,多客戶端,多線程訪問。
要獲得交易,你可以簡單地對這樣的一些腳本('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問題。
Craig Ringer提供了一種手動打開多個事務的方法,如果發現不是很方便,可以使用pgbench一次運行多個事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.