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