簡體   English   中英

MySQL:在不鎖定的情況下將記錄插入一個從另一個表讀取的表中

[英]MySQL: Inserting records in one table reading from another, without locking

我正在嘗試這樣做:

INSERT INTO stuff_to_archive
  SELECT a.id FROM stuff a INNER JOIN items b ON a.b_id = b.id AND (other conditions on b)

基本上,“東西”太大了,我想每晚歸檔舊記錄。 Stuff_to_archive具有要存檔的記錄ID,以后我將其用作輔助文件以確保創建和刪除相同的記錄。 我試圖做到這一點而沒有鎖定“東西”或“物品”,所以我網站的其余部分可以繼續工作。

我正在加入項目,因為項目包含有關我可以存檔的“材料”記錄的信息。 現在,此查詢匹配的所有記錄(在兩個表中)都不會被寫入。 這兩個表都一直添加新的記錄,“項目”具有更新的記錄,但不是我匹配的記錄(因為這些記錄很舊並且不再被使用)

Stuff和Items是InnoDB。 Stuff_to_archive是MEMORY。

有什么方法可以運行該查詢,而不會阻止其他對物料的讀取/寫入? 我試過了

set SESSION transaction isolation level READ UNCOMMITTED;

但這似乎仍然阻礙了一切。

該INSERT將在stuff_to_archive表中創建大約200萬條記錄。

有什么方法可以在不阻止其他查詢的情況下進行此INSERT操作?

謝謝!
丹尼爾

我對InnoDB鎖不是很好,但是在InnoDB中有一個全局設置和一個隔離級別的會話設置,您可以從MySQL終端檢查它們:

SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

嘗試設置全局事務級別:

SET GLOBAL transaction isolation level READ UNCOMMITTED;

您也可以嘗試為所有新連接禁用autocommit功能,看看是否有區別

SET GLOBAL init_connect='SET autocommit=0';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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