如何優化用SQL語句INSERT INTO … SELECT插入數據時鎖全表的問題


1、binlog format 啟用Row Based Replication(行復制)模式:

SET GLOBAL binlog_format = 'ROW';

如果你想永久的啟用這個模式,請修改my.cnf 配置文件:

[mysqld]
binlog_format=ROW

2、在執行你的sql語句前,設置當前會話的隔離級別

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
INSERT INTO t1 SELECT ....;

如果以上設置不起作用,那么請把隔離級別設置得更寬松,並且設置成全局隔離級別:

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

如果你想永久的啟用這個模式,請修改my.cnf 配置文件:

[mysqld]
transaction-isolation = READ-UNCOMMITTED

當然,如果你需要更嚴格的隔離級別,可以使用READ-COMMITTED代替READ-UNCOMMITTED

 

翻譯自:http://stackoverflow.com/questions/2640898/how-to-improve-insert-into-select-locking-behavior

如有出入,請斧正,謝謝。

原創轉載請注明:http://www.cnblogs.com/langtianya/p/5533963.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM