首页 > 数据库 >Online DDL in MySQL 5.6

Online DDL in MySQL 5.6

时间:2023-06-06 19:33:52浏览次数:55  
标签:log 5.6 MySQL DDL 操作 在线


Online DDL in MySQL 5.6


转载一篇姜老师的:

在线DDL操作(Online DDL)是MySQL 5.6中最为另人激动的改进功能。从历史上看,若我没记错MySQL在2007年就完成了在线索引接口的设计。而MySQL NDB Cluster、TokuDB都早在5.1版本中就支持在线索引添加,然而直到MySQL 5.6用户才能享受到该功能(虽然facebook团队有推出OSC),这也是MySQL数据库长期被吐槽的原因之一(特别是Oracle DBAOnline DDL in MySQL 5.6 – insidemysql – Inside MySQL)。

虽然MySQL 5.6支持了在线DDL操作,不过还是有些需要注意的问题,最为重要的就是参数innodb_online_alter_log_max_size的配置。在进行DDL操作时会保存操作时间内产生的日志,这与facebook OSC的临时表,但是其保存在内存中,而该内存的大小由参数innodb_online_alter_log_max_size定义,默认大小为128M。如果产生的日志超出该容量大小,则会抛出类似如下的异常提示:

Error:1799SQLSTATE:HY000(ER_INNODB_ONLINE_LOG_TOO_BIG)
Message: Creating index ‘idx_aaa’ required more than ‘innodb_online_alter_log_max_size’ bytes of modification log. Please try again.

根据我的实际经验体会,128M通常在一个活跃的线上环境中是不够的,通常512M是比较推荐的值。好在该参数是动态的,可以基于会话级别进行调整。另外个人的体会是,在进行在线索引添加操作时,数据库性能会有20~30%的下降。

另一个小技巧是使用ALTER TABLE … LOCK=NONE来强制使用在线DDL操作,若操作不支持,则会抛出异常,如:

mysql> ALTER TABLE customers DROP PRIMARY KEY ,LOCK=NONE;
ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: Dropping a primary key is not allowed without also adding a new primary key. Try LOCK=SHARED.

正如前面所说的,并不是所有的DDL操作都支持在线操作,这里附上MySQL官方文档对于DDL操作的总结

标签:log,5.6,MySQL,DDL,操作,在线
From: https://blog.51cto.com/u_16152230/6427066

相关文章

  • MYSQL联合查询
       ......
  • MYSQL查询
         子查询   分页查询 ......
  • 2.1类神经网路训练不起来怎么办 (一):局部最小值 (local minima) 与鞍点 (saddle poin
    1.Whengradientissmall  本小节主要讨论优化器造成的训练问题.1.1CriticalPoint(临界点)  如果训练过程中经过很多个epoch后,loss还是不下降,那么可能是因为梯度(斜率)接近于0,导致参数更新的步伐接近于0,所以参数无法进一步更新,loss也就降不下去.  这时或许有很......
  • MYSQL分页查询
          ......
  • mysql数据库的锁-select for update
    乐观锁与悲观锁乐观锁和悲观锁只是两个加锁的思路,其实现方式多种多样。以下举几个在mysql数据库中的例子。  对于一次的数据修改,我们可以大概将其分为三步:获取数据修改数据提交修改乐观锁假设A、B两个角色对数据进行修改:乐观锁对数据保持一个乐观态度(大概率......
  • Mysql Workbench的CSV数据导入
    首先新建一个数据库和要从.csv导入数据的表,注意数据格式的选取。然后将csv文件用NOTEPAD++打开,将文件格式转换为UTF8.转化完成即可关闭。在MysqlWorkbench中想要导入数据的表,右键选取TableDataImportWizard进入数据导入向导,在文件路径中找到csv文件,下一步。选择Useex......
  • Postgresql,MySQL, SQL Server 的多表连接(join)update 操作
    数据库更新时经常会join其他表做判断更新,PostgreSQL的写法与其他关系型数据库更有不同,下面以SQLServer,MySQL,PostgreSQL的数据库做对比和展示。先造数据源。createtableA(idint,cityvarchar(20));createtableB(idint,namevarchar(20));insertintoAvalues(1......
  • mysql的ROUND、TRUNCATE函数
    在MySQL中,可以使用ROUND函数对数字进行四舍五入并保留指定位数的小数,语法如下:ROUND(number,decimals)其中,number参数表示要进行四舍五入的数字,decimals参数表示要保留的小数位数。例如,要对数字3.1415926进行四舍五入并保留两位小数,可以使用以下SQL语句:SELECTROUND(3.141592......
  • mysql-窗口函数
    转:https://zhuanlan.zhihu.com/p/456560406什么是窗口--窗口对于group分组和聚合函数等,窗口是固定的,就是每一组,比如想知道每个学生的平均成绩,指定的组就是每个学生的id,聚合函数在这个id划定的窗口内对所有记录进行计算。这是静态窗口,窗口内的记录相互关联,窗口外的记录彼此......
  • CENTOS 6.0 mini系统编译安装mysql 5.5.16过程
     下面的安装过程是www.centos.bz博主朱海茂的文章,在此一并谢过,看到你的这篇文章我编译成功了,谢谢。根据我的情况进行了简单的修改,请见谅。我的是centos6的系统,使用mini的安装模式,安装完成后的第一件事要配置好网络,这个过程就郁闷了我好几次,mini模式安装出来没有setup,网络只能......