MySQL5.7之在線DDL不會鎖表


MySQL5.7在線修改varchar字段不在鎖表,測試過程如下:

    mysql> select version();
    +------------+
    | version() |
    +------------+
    | 5.7.18-log |
    +------------+

    mysql> select count(*) from T_USER_INFO;
    +----------+
    | count(*) |
    +----------+
    | 7147528 |
    +----------+

打開兩個命令行窗口:
窗口一:

mysql> alter table T_USER_INFO modify column USER_NAME varchar(100);

窗口二:

mysql> delete from T_USER_INFO where user_name='rz19930119';

先執行第一個窗口命令,再執行第二個窗口命令,第二個delete語句很快執行完,第一個修改語句執行了6分鍾。
總結:MySQL5.7以上的版本,online DDL不會鎖表。

原理:
MySQL5.7以上的版本中,在執行創建或者刪除的操作同時,將DML操作日志寫入一個緩存中。待修改完成之后再重做到原表上,以保住數據的一致性。這個緩存大小由innodb_online_alter_log_max_size控制,默認為128MB,若用戶更改表比較頻繁,在線DML業務壓力較大,則innodb_online_alter_log_max_size空間不能存放日志,會拋出錯誤,此時可以調大innodb_online_alter_log_max_size獲得更多日志緩存空間解決問題 。


免責聲明!

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



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