传奇私服le修改字段长度
作者:admin发布时间:2021-10-10分类:传奇私服浏览:231评论:28
在线DDL修改字段属性时不锁表
《管理之道性能调优、高可用与监控第2版》第2章与的新特性本章主要讲解和的一些增强性能这些增强性能极大地提高了系统和的性能。本节为大家介绍在线DDL修改字段属性时不锁表。
在线DDL修改varchar字段属性传奇私服le修改字段长度时不锁表
MySQL5.7针对DDL功能做了加强修改varchar字段已不锁表测试过程如图2-22和图2-23所示。
100万行的表现在要把padvarchar(60)修改为padvarchar(80)可以看到既不用拷贝数据也不用锁表不到1秒即执行完毕如图2-24所示。
ALGORITHM用于指定创建或删除索引的算法COPY表示按照MySQL5.1版本之前的方法即创建临时表并全表拷贝数据原表加全局读锁INPLACE表示创建字段或删除字段操作不需要创建临时表DEFAULT表示是通过INPLACE的算法还是COPY的算法。
如果字段属性大于并等于varchar(256)这里的256是指字节UTF8占用3字节或者把varchar(80)减少到varchar(40)则仍需要拷贝数据且锁表。并且只对varchar类型做了优化char和int是无效的分别如图2-25和图2-26所示。
注意MariaDB10.1并不支持对varchar修改表结构的优化。
Online?DDL的原理在执行创建或删除操作的同时将INSERT/UPDATE/DELETE这类DML操作日志写入一个缓存中。待完成修改表结果后再重做应用到原表上以此达到数据的一致性。这个缓存大小由innodb_online_alter_log_max_size控制默认为128MB若用户更新的表比较频繁在创建过程中伴有大量的写事务如遇到innodb_online_alter_log_max_size的空间不能存放日志则会抛出错误。对于这个操作可以调大参数innodb_online_alter_log_max_size一次获得更大的日志缓存空间。
下面重现报错过程步骤把日志缓存innodb_online_alter_log_max_size值调到最小值1然后添加一个新的name字段这时在会话二执行updatesbtestsetc’hechunyang’;时就会出现报错信息从结果上来看表结构修改并未成功如图2-27所示。
注意若临时表的大小超出此上限则ALTER表的操作会失败当前所有未提交的DML操作会回滚。因此较大的值允许在线DDL操作期间有更多的DML被执行但是过大的值会使DDL操作结束后应用innodb_online_alter_log日志中的数据会花很长的时间。修改表结构操作尤其是对一张大表建议在凌晨业务低峰期执行另外在执行OnlineDDL的过程中数据库吞吐量会下降。
综上所述OnlineDDL这个名字很容易误导新手因为不论什么情况下修改表结构都不会锁表理想很丰满现实很骨感注意这个坑如果开发人员让修改表字段属性那么建议使用pt-online-schema-change。另外增加、删除字段或索引不锁全表删除主键锁全表如图2-28所示。
当添加字段altertable表时对该表的增、删、改、查均不会锁表。而在这之前当该表被访问时需要等其执行完毕后才可以执行altertable例如在会话一故意执行一条大结果的查询然后在会话二执行增加字段name此时还会出现表锁如图2-29所示。
因此在凌晨上线时一定要执行showprocesslist命令并观察此刻是否有某个慢SQL对该表进行操作以免altertable表时出现表锁现象。
- 上一篇:新服超爽体验 为阿里做个广告吧
- 下一篇:如何修改字段长度?
已有28位网友发表了看法: