簡體   English   中英

如何在PostgreSQL中同時運行多個事務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM