• ADADADADAD

    MariaDB10.3 增补AliSQL补丁---安全执行Online DDL[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:13:12

    作者:文/会员上传

    简介:

    Online DDL从名字上看很容易误导新手,以为不论什么情况,修改表结构都不会锁表,理想很丰满,现实很骨感,注意这个坑!有以下两种情况执行DDL操作会锁表的,Waiting for table metadata

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    Online DDL从名字上看很容易误导新手,以为不论什么情况,修改表结构都不会锁表,理想很丰满,现实很骨感,注意这个坑!

    有以下两种情况执行DDL操作会锁表的,Waiting for table metadata lock(元数据表锁)

    1、增加、删除字段或索引不会锁全表,删除主键、更改字段属性会锁全表,见下图所示:

    2、在添加字段alter table表时,对该表的增、删、改、查均不会锁表。而在这之前,该表有被访问时,需要等其执行完毕后,才可以执行alter table,例如在会话一,故意执行一条大结果的查询,然后在会话二执行增加字段age,此时还会出现表锁,如下图所示:

    针对第二种情况,MariaDB10.3 增补AliSQL补丁-DDL FAST FAIL,让其DDL操作快速失败。

    语法为:

    ALTERTABLEtbl_name[WAITn|NOWAIT]...CREATE...INDEXONtbl_name(index_col_name,...)[WAITn|NOWAIT]...DROPINDEX...[WAITn|NOWAIT]DROPTABLEtbl_name[WAITn|NOWAIT]...LOCKTABLE...[WAITn|NOWAIT]OPTIMIZETABLEtbl_name[WAITn|NOWAIT]RENAMETABLEtbl_name[WAITn|NOWAIT]...SELECT...FORUPDATE[WAITn|NOWAIT]SELECT...LOCKINSHAREMODE[WAITn|NOWAIT]TRUNCATETABLEtbl_name[WAITn|NOWAIT]

    例:

    如果线上有某个慢SQL对该表进行操作,可以使用WAIT n(以秒为单位设置等待)或NOWAIT在语句中显式设置锁等待超时,在这种情况下,如果无法获取锁,语句将立即失败。 WAIT 0相当于NOWAIT。

    参考:https://jira.mariadb.org/browse/MDEV-11388


    MariaDB10.3 增补AliSQL补丁---安全执行Online DDL.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mariadbonlineddl