美文网首页
MYSQL MDL 可能引发的雪崩

MYSQL MDL 可能引发的雪崩

作者: baboon | 来源:发表于2016-04-22 16:16 被阅读259次

    1. 事务开始begin transaction的位置

    **MySQL的设计:

    在设置的autocommit=0;read_commited的时候,无论session的第一条语句是select还是dml,都开始一个事务,然后直到commit,所持有的MDL锁也一直维持到commit结束。

    Oracle的设计:

    **session的第一条更新语句发起时,才创建transaction,在读多的系统上,减少了阻塞的发生可能性。特别是在开发人员发起select语句时,认为没有更新,就不再commit。但在MySQL上,发起select语句,而忘记commit,是非常危险的。

    2. ddl语句阻塞

    **MySQL的设计:

    **ddl语句发起时,如果无法获取排他锁,那么ddl将进入阻塞状态,但由于是queue的设计,就阻塞了后续所有的dml和selec操作,在高并发系统上,可能会引起雪崩。

    **Oracle的设计:

    **在oracle 11g之前,ddl语句是fast fail的,不进入阻塞状态,所以繁忙的表进行ddl操作时,经常遇到的错误:ORA-00054: resource busy。但在11g之后虽然可以进行阻塞,并提供了ddl_time_out这样的参数进行控制,但在高并发的系统上,运维的操作依然不采用,而是fast fail。

    相关文章

      网友评论

          本文标题:MYSQL MDL 可能引发的雪崩

          本文链接:https://www.haomeiwen.com/subject/yidxrttx.html